@bicycle-codes/simple-aes
v0.0.27
Published
An easy way to use symmetric keys in browsers or node
Downloads
142
Maintainers
Readme
simple AES
Cryptography used by vanishing.page. Works in browsers and node.
This is generally useful as a dead simple way of working with symmetric keys in a browser or node.
Thanks to Fission, the original author for much of this code.
install
npm i -S @bicycle-codes/simple-aes
use
bundler
Just import
import {
decryptMessage,
encryptMessage,
type Message
} from '@bicycle-codes/simple-aes'
// } from '@bicycle-codes/simple-aes/compat' // for older browsers
pre-bundled
This exposes pre-bundled & minified JS files.
copy
cp ./node_modules/@bicycle-codes/simple-aes/dist/compat.min.js ./public
cp ./node_modules/@bicycle-codes/simple-aes/dist/index.min.js ./public/simple-aes.min.js
link
<body>
<!-- ... -->
<script type="module" src="./compat.min.js"></script>
<!-- or webcrypto version -->
<script type="module" src="./simple-aes.min.js"></script>
</body>
API
@bicycle-codes/simple-aes
Use the webcrypto
API. This will only work in newer browsers.
import {
decryptMessage,
encryptMessage,
type Message
} from '@bicycle-codes/simple-aes'
@bicycle-codes/simple-aes/compat
Use a user-land module, @noble/ciphers. This will work in browsers of all ages.
import {
encryptMessage,
decryptMessage
} from '@bicycle-codes/simple-aes/compat'
encryptMessage
Generate a new AES key and encrypt the given message object.
Return an array of [ encryptedMessage, { key }]
,
where key
is a new AES key, encoded as base64url
.
async function encryptMessage (
msg:{ content:string }
):Promise<[{ content:string }, { key }]>
encrypt example
import { encryptMessage } from '@bicycle-codes/simple-aes'
const [encryptedMsg, { key }] = await encryptMessage({
content: 'hello world'
})
console.log(encryptedMessage)
// => { content: '5eAcA6+jnBfbuCx8L...' }
decryptMessage
Decrypt the given message with the given key. Suitable for decrypting a message that was encrypted by this library. Key is an AES key, base64url
encoded.
async function decryptMessage (
msg:{ content:string },
keyString:string // <-- base64url
):Promise<{ content:string }>
decrypt example
import { test } from '@bicycle-codes/tapzero'
import { decryptMessage } from '@bicycle-codes/simple-aes'
test('decrypt the message', async t => {
const decrypted = await decryptMessage(message, key)
t.equal(decrypted.content, 'hello world',
'should decrypt to the right text')
})