public final class EdDSAEngine
extends java.security.Signature
The EdDSA sign and verify algorithms do not interact well with the Java Signature API, as one or more update() methods must be called before sign() or verify(). Using the standard API, this implementation must copy and buffer all data passed in via update().
This implementation offers two ways to avoid this copying, but only if all data to be signed or verified is available in a single byte array.
Option 1:
Option 2:
| Modifier and Type | Class and Description |
|---|---|
private static class |
EdDSAEngine.OneShotSpec |
| Modifier and Type | Field and Description |
|---|---|
private java.io.ByteArrayOutputStream |
baos |
private java.security.MessageDigest |
digest |
private EdDSAKey |
key |
static java.security.spec.AlgorithmParameterSpec |
ONE_SHOT_MODE
To efficiently sign or verify data in one shot, pass this to setParameters()
after initSign() or initVerify() but BEFORE THE FIRST AND ONLY
update(data) or update(data, off, len).
|
private byte[] |
oneShotBytes |
private int |
oneShotLength |
private boolean |
oneShotMode |
private int |
oneShotOffset |
static java.lang.String |
SIGNATURE_ALGORITHM |
| Constructor and Description |
|---|
EdDSAEngine()
No specific EdDSA-internal hash requested, allows any EdDSA key.
|
EdDSAEngine(java.security.MessageDigest digest)
Specific EdDSA-internal hash requested, only matching keys will be allowed.
|
| Modifier and Type | Method and Description |
|---|---|
private void |
digestInitSign(EdDSAPrivateKey privKey) |
protected java.lang.Object |
engineGetParameter(java.lang.String param)
Deprecated.
|
protected void |
engineInitSign(java.security.PrivateKey privateKey) |
protected void |
engineInitVerify(java.security.PublicKey publicKey) |
protected void |
engineSetParameter(java.security.spec.AlgorithmParameterSpec spec) |
protected void |
engineSetParameter(java.lang.String param,
java.lang.Object value)
Deprecated.
|
protected byte[] |
engineSign() |
protected void |
engineUpdate(byte b) |
protected void |
engineUpdate(byte[] b,
int off,
int len) |
protected boolean |
engineVerify(byte[] sigBytes) |
private void |
reset() |
byte[] |
signOneShot(byte[] data)
To efficiently sign all the data in one shot, if it is available,
use this method, which will avoid copying the data.
|
byte[] |
signOneShot(byte[] data,
int off,
int len)
To efficiently sign all the data in one shot, if it is available,
use this method, which will avoid copying the data.
|
boolean |
verifyOneShot(byte[] data,
byte[] signature)
To efficiently verify all the data in one shot, if it is available,
use this method, which will avoid copying the data.
|
boolean |
verifyOneShot(byte[] data,
byte[] signature,
int sigoff,
int siglen)
To efficiently verify all the data in one shot, if it is available,
use this method, which will avoid copying the data.
|
boolean |
verifyOneShot(byte[] data,
int off,
int len,
byte[] signature)
To efficiently verify all the data in one shot, if it is available,
use this method, which will avoid copying the data.
|
boolean |
verifyOneShot(byte[] data,
int off,
int len,
byte[] signature,
int sigoff,
int siglen)
To efficiently verify all the data in one shot, if it is available,
use this method, which will avoid copying the data.
|
private byte[] |
x_engineSign() |
private boolean |
x_engineVerify(byte[] sigBytes) |
clone, getAlgorithm, getInstance, getInstance, getInstance, getParameter, getParameters, getProvider, initSign, initSign, initVerify, initVerify, setParameter, setParameter, sign, sign, toString, update, update, update, update, verify, verifypublic static final java.lang.String SIGNATURE_ALGORITHM
private java.security.MessageDigest digest
private java.io.ByteArrayOutputStream baos
private EdDSAKey key
private boolean oneShotMode
private byte[] oneShotBytes
private int oneShotOffset
private int oneShotLength
public static final java.security.spec.AlgorithmParameterSpec ONE_SHOT_MODE
public EdDSAEngine()
public EdDSAEngine(java.security.MessageDigest digest)
digest - the hash algorithm that keys must have to sign or verify.private void reset()
protected void engineInitSign(java.security.PrivateKey privateKey)
throws java.security.InvalidKeyException
engineInitSign in class java.security.SignatureSpijava.security.InvalidKeyExceptionprivate void digestInitSign(EdDSAPrivateKey privKey)
protected void engineInitVerify(java.security.PublicKey publicKey)
throws java.security.InvalidKeyException
engineInitVerify in class java.security.SignatureSpijava.security.InvalidKeyExceptionprotected void engineUpdate(byte b)
throws java.security.SignatureException
engineUpdate in class java.security.SignatureSpijava.security.SignatureException - if in one-shot modeprotected void engineUpdate(byte[] b,
int off,
int len)
throws java.security.SignatureException
engineUpdate in class java.security.SignatureSpijava.security.SignatureException - if one-shot rules are violatedprotected byte[] engineSign()
throws java.security.SignatureException
engineSign in class java.security.SignatureSpijava.security.SignatureExceptionprivate byte[] x_engineSign()
throws java.security.SignatureException
java.security.SignatureExceptionprotected boolean engineVerify(byte[] sigBytes)
throws java.security.SignatureException
engineVerify in class java.security.SignatureSpijava.security.SignatureExceptionprivate boolean x_engineVerify(byte[] sigBytes)
throws java.security.SignatureException
java.security.SignatureExceptionpublic byte[] signOneShot(byte[] data)
throws java.security.SignatureException
setParameter(ONE_SHOT_MODE) update(data) sig = sign()
data - the message to be signedjava.security.SignatureException - if update() already calledONE_SHOT_MODEpublic byte[] signOneShot(byte[] data,
int off,
int len)
throws java.security.SignatureException
setParameter(ONE_SHOT_MODE) update(data, off, len) sig = sign()
data - byte array containing the message to be signedoff - the start of the message inside datalen - the length of the messagejava.security.SignatureException - if update() already calledONE_SHOT_MODEpublic boolean verifyOneShot(byte[] data,
byte[] signature)
throws java.security.SignatureException
setParameter(ONE_SHOT_MODE) update(data) ok = verify(signature)
data - the message that was signedsignature - of the messagejava.security.SignatureException - if update() already calledONE_SHOT_MODEpublic boolean verifyOneShot(byte[] data,
int off,
int len,
byte[] signature)
throws java.security.SignatureException
setParameter(ONE_SHOT_MODE) update(data, off, len) ok = verify(signature)
data - byte array containing the message that was signedoff - the start of the message inside datalen - the length of the messagesignature - of the messagejava.security.SignatureException - if update() already calledONE_SHOT_MODEpublic boolean verifyOneShot(byte[] data,
byte[] signature,
int sigoff,
int siglen)
throws java.security.SignatureException
setParameter(ONE_SHOT_MODE) update(data) ok = verify(signature, sigoff, siglen)
data - the message that was signedsignature - byte array containing the signaturesigoff - the start of the signaturesiglen - the length of the signaturejava.security.SignatureException - if update() already calledONE_SHOT_MODEpublic boolean verifyOneShot(byte[] data,
int off,
int len,
byte[] signature,
int sigoff,
int siglen)
throws java.security.SignatureException
setParameter(ONE_SHOT_MODE) update(data, off, len) ok = verify(signature, sigoff, siglen)
data - byte array containing the message that was signedoff - the start of the message inside datalen - the length of the messagesignature - byte array containing the signaturesigoff - the start of the signaturesiglen - the length of the signaturejava.security.SignatureException - if update() already calledONE_SHOT_MODEprotected void engineSetParameter(java.security.spec.AlgorithmParameterSpec spec)
throws java.security.InvalidAlgorithmParameterException
engineSetParameter in class java.security.SignatureSpijava.security.InvalidAlgorithmParameterException - if spec is ONE_SHOT_MODE and update() already calledONE_SHOT_MODEprotected void engineSetParameter(java.lang.String param,
java.lang.Object value)
engineSetParameter in class java.security.SignatureSpiprotected java.lang.Object engineGetParameter(java.lang.String param)
engineGetParameter in class java.security.SignatureSpi