Initial public release of birdwatch-relay
This commit is contained in:
commit
c176f2ad24
17 changed files with 2025 additions and 0 deletions
31
internal/crypto/sealedbox.go
Normal file
31
internal/crypto/sealedbox.go
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
//
|
||||
// Sealed-box encryption: anonymous public-key encryption. Anyone holding the
|
||||
// recipient's public key can produce a ciphertext; only the holder of the
|
||||
// recipient's private key can decrypt it. Built on X25519 + XSalsa20-Poly1305.
|
||||
//
|
||||
// Wire format: ephemeral_pubkey (32 bytes) || box_ciphertext.
|
||||
// See https://pkg.go.dev/golang.org/x/crypto/nacl/box#SealAnonymous.
|
||||
//
|
||||
// On the Android side, the matching primitive is libsodium's
|
||||
// crypto_box_seal / crypto_box_seal_open. Lazysodium-android is a
|
||||
// drop-in dependency.
|
||||
|
||||
package crypto
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"errors"
|
||||
|
||||
"golang.org/x/crypto/nacl/box"
|
||||
)
|
||||
|
||||
// Seal encrypts plaintext to recipientPub. recipientPub must be 32 bytes (X25519).
|
||||
func Seal(plaintext []byte, recipientPub []byte) ([]byte, error) {
|
||||
if len(recipientPub) != 32 {
|
||||
return nil, errors.New("recipient public key must be 32 bytes")
|
||||
}
|
||||
var pub [32]byte
|
||||
copy(pub[:], recipientPub)
|
||||
return box.SealAnonymous(nil, plaintext, &pub, rand.Reader)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue