本文整理汇总了Java中org.bouncycastle.crypto.macs.Poly1305.init方法的典型用法代码示例。如果您正苦于以下问题:Java Poly1305.init方法的具体用法?Java Poly1305.init怎么用?Java Poly1305.init使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.bouncycastle.crypto.macs.Poly1305
的用法示例。
在下文中一共展示了Poly1305.init方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: seal
import org.bouncycastle.crypto.macs.Poly1305; //导入方法依赖的package包/类
/**
* Encrypt a plaintext using the given key and nonce.
*
* @param nonce a 24-byte nonce (cf. {@link #nonce(ByteString)}, {@link #nonce()})
* @param plaintext an arbitrary message
* @return the ciphertext
*/
public ByteString seal(@Nonnull ByteString nonce, @Nonnull ByteString plaintext) {
// initialize XSalsa20
final XSalsa20Engine xsalsa20 = new XSalsa20Engine();
xsalsa20.init(true, new ParametersWithIV(new KeyParameter(key), nonce.toByteArray()));
// generate Poly1305 subkey
final byte[] sk = new byte[32];
xsalsa20.processBytes(sk, 0, 32, sk, 0);
// encrypt plaintext
final byte[] out = new byte[plaintext.size() + 16];
xsalsa20.processBytes(plaintext.toByteArray(), 0, plaintext.size(), out, 16);
// hash ciphertext and prepend mac to ciphertext
final Poly1305 poly1305 = new Poly1305();
poly1305.init(new KeyParameter(sk));
poly1305.update(out, 16, plaintext.size());
poly1305.doFinal(out, 0);
return ByteString.of(out);
}
示例2: open
import org.bouncycastle.crypto.macs.Poly1305; //导入方法依赖的package包/类
/**
* Decrypt a ciphertext using the given key and nonce.
*
* @param nonce a 24-byte nonce
* @param ciphertext the encrypted message
* @return an {@link Optional} of the original plaintext, or if either the key, nonce, or
* ciphertext was modified, an empty {@link Optional}
* @see #nonce(ByteString)
* @see #nonce()
*/
public Optional<ByteString> open(@Nonnull ByteString nonce, @Nonnull ByteString ciphertext) {
final byte[] in = ciphertext.toByteArray();
final XSalsa20Engine xsalsa20 = new XSalsa20Engine();
final Poly1305 poly1305 = new Poly1305();
// initialize XSalsa20
xsalsa20.init(false, new ParametersWithIV(new KeyParameter(key), nonce.toByteArray()));
// generate mac subkey
final byte[] sk = new byte[32];
xsalsa20.processBytes(sk, 0, sk.length, sk, 0);
// hash ciphertext
poly1305.init(new KeyParameter(sk));
final int len = Math.max(ciphertext.size() - 16, 0);
poly1305.update(in, 16, len);
final byte[] calculatedMAC = new byte[16];
poly1305.doFinal(calculatedMAC, 0);
// extract mac
final byte[] presentedMAC = new byte[16];
System.arraycopy(in, 0, presentedMAC, 0, Math.min(ciphertext.size(), 16));
// compare macs
if (!MessageDigest.isEqual(calculatedMAC, presentedMAC)) {
return Optional.empty();
}
// decrypt ciphertext
final byte[] plaintext = new byte[len];
xsalsa20.processBytes(in, 16, plaintext.length, plaintext, 0);
return Optional.of(ByteString.of(plaintext));
}