Skip to content

Instantly share code, notes, and snippets.

@jorrizza
Last active November 24, 2020 17:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jorrizza/c9aa77a0b86ca578e4c440eed9106032 to your computer and use it in GitHub Desktop.
Save jorrizza/c9aa77a0b86ca578e4c440eed9106032 to your computer and use it in GitHub Desktop.
NaCl test Go and Python
/message_*
/.vscode
package main
import (
"crypto/ed25519"
"crypto/rand"
"fmt"
"io/ioutil"
"os"
"github.com/jorrizza/ed2curve25519"
"golang.org/x/crypto/nacl/box"
)
func main() {
aliceEd25519Seed := make([]byte, ed25519.SeedSize)
bobEd25519Seed := make([]byte, ed25519.SeedSize)
f, err := os.Open("key_alice")
if err != nil {
panic(err)
}
if _, err := f.Read(aliceEd25519Seed); err != nil {
panic(err)
}
if err := f.Close(); err != nil {
panic(err)
}
f, err = os.Open("key_bob")
if err != nil {
panic(err)
}
if _, err := f.Read(bobEd25519Seed); err != nil {
panic(err)
}
if err := f.Close(); err != nil {
panic(err)
}
ed25519PrivateKey := ed25519.NewKeyFromSeed(aliceEd25519Seed)
ed25519PublicKey := ed25519PrivateKey.Public().(ed25519.PublicKey)
curve25519PrivateKey := ed2curve25519.Ed25519PrivateKeyToCurve25519(ed25519PrivateKey)
curve25519PublicKey := ed2curve25519.Ed25519PublicKeyToCurve25519(ed25519PublicKey)
alicePrivateKey, alicePublicKey := new([32]byte), new([32]byte)
bobPrivateKey, bobPublicKey := new([32]byte), new([32]byte)
copy(alicePrivateKey[:], curve25519PrivateKey)
copy(alicePublicKey[:], curve25519PublicKey)
ed25519PrivateKey = ed25519.NewKeyFromSeed(bobEd25519Seed)
ed25519PublicKey = ed25519PrivateKey.Public().(ed25519.PublicKey)
curve25519PrivateKey = ed2curve25519.Ed25519PrivateKeyToCurve25519(ed25519PrivateKey)
curve25519PublicKey = ed2curve25519.Ed25519PublicKeyToCurve25519(ed25519PublicKey)
copy(bobPrivateKey[:], curve25519PrivateKey)
copy(bobPublicKey[:], curve25519PublicKey)
message := []byte("kill all humans!")
encrypted, _ := box.SealAnonymous(nil, message, bobPublicKey, rand.Reader)
f, err = os.Create("message_bob")
if err != nil {
panic(err)
}
if _, err := f.Write(encrypted); err != nil {
panic(err)
}
if err := f.Close(); err != nil {
panic(err)
}
encryptedForMe, err := ioutil.ReadFile("message_alice")
if err != nil {
return
}
decrypted, ok := box.OpenAnonymous(nil, encryptedForMe, alicePublicKey, alicePrivateKey)
if !ok {
fmt.Println("Could not decrypt message_alice")
} else {
fmt.Printf("Message: %s\n", decrypted)
}
}
#!/usr/bin/env python
import sys
from nacl.signing import SigningKey
from nacl.public import PrivateKey, Box, SealedBox
from nacl.encoding import HexEncoder
f = open('key_alice', 'rb')
key_alice = f.read(32)
f.close()
f = open('key_bob', 'rb')
key_bob = f.read(32)
f.close()
ed25519_private_key = SigningKey(key_alice)
ed25519_public_key = ed25519_private_key.verify_key
curve25519_private_key = ed25519_private_key.to_curve25519_private_key()
curve25519_public_key = ed25519_public_key.to_curve25519_public_key()
alice_private_key = curve25519_private_key
alice_public_key = alice_private_key.public_key
bob_private_key = SigningKey(key_bob).to_curve25519_private_key()
bob_public_key = bob_private_key.public_key
message = b"kill all humans!"
alice_box = SealedBox(alice_public_key)
encrypted = alice_box.encrypt(message)
f = open('message_alice', 'wb+')
f.write(encrypted)
f.close()
try:
f = open('message_bob', 'rb')
except:
exit(0)
encrypted_for_me = f.read()
f.close()
bob_box = SealedBox(bob_private_key)
decrypted = bob_box.decrypt(encrypted_for_me)
print(f"Message: {decrypted.decode()}")
œ’„?ŽÌÂZ"HŸÎ®»¢f0KXoxR^Ï„C À@]
”?ÚWŔ° ý#đö…é“ #a~?˘”mwĘh
.PHONY: all
all:
go run alice.go
pipenv run ./bob.py
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
pynacl = "*"
[requires]
python_version = "3.8"
{
"_meta": {
"hash": {
"sha256": "f6549c07d210669ae5c4392ab30909ae0081667ab7fff27fc45d4ba601ac602a"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.8"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"cffi": {
"hashes": [
"sha256:005f2bfe11b6745d726dbb07ace4d53f057de66e336ff92d61b8c7e9c8f4777d",
"sha256:09e96138280241bd355cd585148dec04dbbedb4f46128f340d696eaafc82dd7b",
"sha256:0b1ad452cc824665ddc682400b62c9e4f5b64736a2ba99110712fdee5f2505c4",
"sha256:0ef488305fdce2580c8b2708f22d7785ae222d9825d3094ab073e22e93dfe51f",
"sha256:15f351bed09897fbda218e4db5a3d5c06328862f6198d4fb385f3e14e19decb3",
"sha256:22399ff4870fb4c7ef19fff6eeb20a8bbf15571913c181c78cb361024d574579",
"sha256:23e5d2040367322824605bc29ae8ee9175200b92cb5483ac7d466927a9b3d537",
"sha256:2791f68edc5749024b4722500e86303a10d342527e1e3bcac47f35fbd25b764e",
"sha256:2f9674623ca39c9ebe38afa3da402e9326c245f0f5ceff0623dccdac15023e05",
"sha256:3363e77a6176afb8823b6e06db78c46dbc4c7813b00a41300a4873b6ba63b171",
"sha256:33c6cdc071ba5cd6d96769c8969a0531be2d08c2628a0143a10a7dcffa9719ca",
"sha256:3b8eaf915ddc0709779889c472e553f0d3e8b7bdf62dab764c8921b09bf94522",
"sha256:3cb3e1b9ec43256c4e0f8d2837267a70b0e1ca8c4f456685508ae6106b1f504c",
"sha256:3eeeb0405fd145e714f7633a5173318bd88d8bbfc3dd0a5751f8c4f70ae629bc",
"sha256:44f60519595eaca110f248e5017363d751b12782a6f2bd6a7041cba275215f5d",
"sha256:4d7c26bfc1ea9f92084a1d75e11999e97b62d63128bcc90c3624d07813c52808",
"sha256:529c4ed2e10437c205f38f3691a68be66c39197d01062618c55f74294a4a4828",
"sha256:6642f15ad963b5092d65aed022d033c77763515fdc07095208f15d3563003869",
"sha256:85ba797e1de5b48aa5a8427b6ba62cf69607c18c5d4eb747604b7302f1ec382d",
"sha256:8f0f1e499e4000c4c347a124fa6a27d37608ced4fe9f7d45070563b7c4c370c9",
"sha256:a624fae282e81ad2e4871bdb767e2c914d0539708c0f078b5b355258293c98b0",
"sha256:b0358e6fefc74a16f745afa366acc89f979040e0cbc4eec55ab26ad1f6a9bfbc",
"sha256:bbd2f4dfee1079f76943767fce837ade3087b578aeb9f69aec7857d5bf25db15",
"sha256:bf39a9e19ce7298f1bd6a9758fa99707e9e5b1ebe5e90f2c3913a47bc548747c",
"sha256:c11579638288e53fc94ad60022ff1b67865363e730ee41ad5e6f0a17188b327a",
"sha256:c150eaa3dadbb2b5339675b88d4573c1be3cb6f2c33a6c83387e10cc0bf05bd3",
"sha256:c53af463f4a40de78c58b8b2710ade243c81cbca641e34debf3396a9640d6ec1",
"sha256:cb763ceceae04803adcc4e2d80d611ef201c73da32d8f2722e9d0ab0c7f10768",
"sha256:cc75f58cdaf043fe6a7a6c04b3b5a0e694c6a9e24050967747251fb80d7bce0d",
"sha256:d80998ed59176e8cba74028762fbd9b9153b9afc71ea118e63bbf5d4d0f9552b",
"sha256:de31b5164d44ef4943db155b3e8e17929707cac1e5bd2f363e67a56e3af4af6e",
"sha256:e66399cf0fc07de4dce4f588fc25bfe84a6d1285cc544e67987d22663393926d",
"sha256:f0620511387790860b249b9241c2f13c3a80e21a73e0b861a2df24e9d6f56730",
"sha256:f4eae045e6ab2bb54ca279733fe4eb85f1effda392666308250714e01907f394",
"sha256:f92cdecb618e5fa4658aeb97d5eb3d2f47aa94ac6477c6daf0f306c5a3b9e6b1",
"sha256:f92f789e4f9241cd262ad7a555ca2c648a98178a953af117ef7fad46aa1d5591"
],
"version": "==1.14.3"
},
"pycparser": {
"hashes": [
"sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0",
"sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.20"
},
"pynacl": {
"hashes": [
"sha256:06cbb4d9b2c4bd3c8dc0d267416aaed79906e7b33f114ddbf0911969794b1cc4",
"sha256:11335f09060af52c97137d4ac54285bcb7df0cef29014a1a4efe64ac065434c4",
"sha256:2fe0fc5a2480361dcaf4e6e7cea00e078fcda07ba45f811b167e3f99e8cff574",
"sha256:30f9b96db44e09b3304f9ea95079b1b7316b2b4f3744fe3aaecccd95d547063d",
"sha256:4e10569f8cbed81cb7526ae137049759d2a8d57726d52c1a000a3ce366779634",
"sha256:511d269ee845037b95c9781aa702f90ccc36036f95d0f31373a6a79bd8242e25",
"sha256:537a7ccbea22905a0ab36ea58577b39d1fa9b1884869d173b5cf111f006f689f",
"sha256:54e9a2c849c742006516ad56a88f5c74bf2ce92c9f67435187c3c5953b346505",
"sha256:757250ddb3bff1eecd7e41e65f7f833a8405fede0194319f87899690624f2122",
"sha256:7757ae33dae81c300487591c68790dfb5145c7d03324000433d9a2c141f82af7",
"sha256:7c6092102219f59ff29788860ccb021e80fffd953920c4a8653889c029b2d420",
"sha256:8122ba5f2a2169ca5da936b2e5a511740ffb73979381b4229d9188f6dcb22f1f",
"sha256:9c4a7ea4fb81536c1b1f5cc44d54a296f96ae78c1ebd2311bd0b60be45a48d96",
"sha256:c914f78da4953b33d4685e3cdc7ce63401247a21425c16a39760e282075ac4a6",
"sha256:cd401ccbc2a249a47a3a1724c2918fcd04be1f7b54eb2a5a71ff915db0ac51c6",
"sha256:d452a6746f0a7e11121e64625109bc4468fc3100452817001dbe018bb8b08514",
"sha256:ea6841bc3a76fa4942ce00f3bda7d436fda21e2d91602b9e21b7ca9ecab8f3ff",
"sha256:f8851ab9041756003119368c1e6cd0b9c631f46d686b3904b18c0139f4419f80"
],
"index": "pypi",
"version": "==1.4.0"
},
"six": {
"hashes": [
"sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",
"sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.15.0"
}
},
"develop": {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment