public static DetachedBox CreateDetached(byte[] message, byte[] nonce, byte[] secretKey, byte[] publicKey) { if (secretKey == null || secretKey.Length != 32) { throw new KeyOutOfRangeException("secretKey", (secretKey == null) ? 0 : secretKey.Length, string.Format("key must be {0} bytes in length.", 32)); } if (publicKey == null || publicKey.Length != 32) { throw new KeyOutOfRangeException("publicKey", (publicKey == null) ? 0 : secretKey.Length, string.Format("key must be {0} bytes in length.", 32)); } if (nonce == null || nonce.Length != 24) { throw new NonceOutOfRangeException("nonce", (nonce == null) ? 0 : nonce.Length, string.Format("nonce must be {0} bytes in length.", 24)); } byte[] array = new byte[message.Length]; byte[] mac = new byte[16]; if (SodiumLibrary.crypto_box_detached(array, mac, message, (long)message.Length, nonce, secretKey, publicKey) != 0) { throw new CryptographicException("Failed to create public detached Box"); } return(new DetachedBox(array, mac)); }