diff --git a/src/romulus_m.go b/src/romulus_m.go new file mode 100644 index 0000000..67c4b2b --- /dev/null +++ b/src/romulus_m.go @@ -0,0 +1,64 @@ +package src + +import ( + "crypto/rand" + "errors" +) + +const abytes int = 16 +const keysize int = 16 +const noncesize int = 16 + +func Encrypt(key []byte, plaintext []byte, additionalData []byte) ([]byte, error) { + + cipher := make([]byte, len(plaintext)+abytes+noncesize) + var cipherlen uint64 + nonce := genNonce() + ret := romulus_m_encrypt( + cipher[noncesize:], + &cipherlen, + plaintext, + (uint64)(len(plaintext)), + additionalData, + (uint64)(len(additionalData)), + nil, + nonce, + key[:keysize], + ) + + if ret != 0 { + return nil, errors.New("Failed to decrypt") + } + copy(cipher, nonce) + return cipher[:cipherlen], nil +} + +func Decrypt(key []byte, ciphertext []byte, additionalData []byte) ([]byte, bool, error) { + + plaintext := make([]byte, len(ciphertext)) + var plaintextLen uint64 + ret := romulus_m_decrypt( + plaintext, + &plaintextLen, + nil, + ciphertext[noncesize:], + (uint64)(len(ciphertext)-noncesize), + additionalData, + (uint64)(len(additionalData)), + ciphertext[:noncesize], + key[:keysize], + ) + if ret == -1 { + return nil, false, errors.New("Failed to authenticate") + } else if ret != 0 { + return nil, false, errors.New("Failed to decrypt") + } + + return plaintext, true, nil +} + +func genNonce() []byte { + buf := make([]byte, noncesize) + rand.Read(buf) + return buf +} diff --git a/src/romulus_m_reference.go b/src/romulus_m_reference.go index 05c6e9a..955e124 100644 --- a/src/romulus_m_reference.go +++ b/src/romulus_m_reference.go @@ -1,5 +1,7 @@ package src +// Converted to go with C2GO, tweaks by 51m0n - 2022. + /* * Date: 05 May 2021 * Contact: Romulus Team (Mustafa Khairallah - mustafa.khairallah@ntu.edu.sg) @@ -275,6 +277,7 @@ func romulus_m_encrypt(c []byte, clen *uint64, m []byte, mlen uint64, ad []byte, var xlen uint64 N = npub + // sm mstart := m[:] cstart := c[:] n = 16 diff --git a/src/skinny_reference.go b/src/skinny_reference.go index 5df3719..43186ea 100644 --- a/src/skinny_reference.go +++ b/src/skinny_reference.go @@ -1,5 +1,7 @@ package src +// Converted to go with C2GO, tweaks by 51m0n - 2022. + /* * Date: 11 December 2015 * Contact: Thomas Peyrin - thomas.peyrin@gmail.com