public byte[] VerifyAndDecryptMessage(byte[] encryptedMessage, byte[] nonce, PublicKeyCryptoKeyPair key, PublicKeyCryptoPublicKey senderPublicKey) { // verify arguments if (nonce == null) { throw new ArgumentNullException("nonce"); } if (nonce.Length != NonceSize) { throw new ArgumentOutOfRangeException("nonce", string.Format("Nonce must be {0} bytes long", NonceSize)); } // decrypt var paddedMessage = new byte[encryptedMessage.Length]; var result = PlatformInvoke64.crypto_box_open(paddedMessage, encryptedMessage, encryptedMessage.Length, nonce, senderPublicKey.PlainBytes, key.SecretKeyBytes); if (result != 0) { throw new CryptographicException("Failed"); } var message = new byte[paddedMessage.Length - _zeroBytes]; Buffer.BlockCopy(paddedMessage, (int)_zeroBytes, message, 0, message.Length); return(message); }
public byte[] EncryptMessage(byte[] message, byte[] nonce, PublicKeyCryptoKeyPair key, PublicKeyCryptoPublicKey recipientPublicKey) { // verify arguments if (nonce == null) { throw new ArgumentNullException("nonce"); } if (nonce.Length != NonceSize) { throw new ArgumentOutOfRangeException("nonce", string.Format("Nonce must be {0} bytes long", NonceSize)); } // pad the message (prepend zero bytes) var paddedMessage = new byte[_zeroBytes + message.Length]; Buffer.BlockCopy(message, 0, paddedMessage, (int)_zeroBytes, message.Length); // encrypt var encryptedMessage = new byte[paddedMessage.Length]; var result = PlatformInvoke64.crypto_box(encryptedMessage, paddedMessage, paddedMessage.Length, nonce, recipientPublicKey.PlainBytes, key.SecretKeyBytes); if (result != 0) { throw new CryptographicException("Failed"); } return(encryptedMessage); }
public IAuthenticatedPublicKeyCryptoContext CreateCrypterInstance(PublicKeyCryptoKeyPair key, PublicKeyCryptoPublicKey publicKey) { // compute the shared secret var sharedSecret = new byte[_beforeNmBytes]; var result = PlatformInvoke64.crypto_box_beforenm(sharedSecret, publicKey.PlainBytes, key.SecretKeyBytes); if (result != 0) throw new CryptographicException("Failed"); return new AuthenticatedPublicKeyCryptoContext(this, sharedSecret); }
public IAuthenticatedPublicKeyCryptoContext CreateCrypterInstance(PublicKeyCryptoKeyPair key, PublicKeyCryptoPublicKey publicKey) { // compute the shared secret var sharedSecret = new byte[_beforeNmBytes]; var result = PlatformInvoke64.crypto_box_beforenm(sharedSecret, publicKey.PlainBytes, key.SecretKeyBytes); if (result != 0) { throw new CryptographicException("Failed"); } return(new AuthenticatedPublicKeyCryptoContext(this, sharedSecret)); }
public byte[] VerifyAndDecryptMessage(byte[] encryptedMessage, byte[] nonce, PublicKeyCryptoKeyPair key, PublicKeyCryptoPublicKey senderPublicKey) { // verify arguments if (nonce == null) throw new ArgumentNullException("nonce"); if (nonce.Length != NonceSize) throw new ArgumentOutOfRangeException("nonce", string.Format("Nonce must be {0} bytes long", NonceSize)); // decrypt var paddedMessage = new byte[encryptedMessage.Length]; var result = PlatformInvoke64.crypto_box_open(paddedMessage, encryptedMessage, encryptedMessage.Length, nonce, senderPublicKey.PlainBytes, key.SecretKeyBytes); if (result != 0) throw new CryptographicException("Failed"); var message = new byte[paddedMessage.Length - _zeroBytes]; Buffer.BlockCopy(paddedMessage, (int)_zeroBytes, message, 0, message.Length); return message; }
public byte[] EncryptMessage(byte[] message, byte[] nonce, PublicKeyCryptoKeyPair key, PublicKeyCryptoPublicKey recipientPublicKey) { // verify arguments if (nonce == null) throw new ArgumentNullException("nonce"); if (nonce.Length != NonceSize) throw new ArgumentOutOfRangeException("nonce", string.Format("Nonce must be {0} bytes long", NonceSize)); // pad the message (prepend zero bytes) var paddedMessage = new byte[_zeroBytes + message.Length]; Buffer.BlockCopy(message, 0, paddedMessage, (int)_zeroBytes, message.Length); // encrypt var encryptedMessage = new byte[paddedMessage.Length]; var result = PlatformInvoke64.crypto_box(encryptedMessage, paddedMessage, paddedMessage.Length, nonce, recipientPublicKey.PlainBytes, key.SecretKeyBytes); if (result != 0) throw new CryptographicException("Failed"); return encryptedMessage; }