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, verify
public 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.SignatureSpi
java.security.InvalidKeyException
private void digestInitSign(EdDSAPrivateKey privKey)
protected void engineInitVerify(java.security.PublicKey publicKey) throws java.security.InvalidKeyException
engineInitVerify
in class java.security.SignatureSpi
java.security.InvalidKeyException
protected void engineUpdate(byte b) throws java.security.SignatureException
engineUpdate
in class java.security.SignatureSpi
java.security.SignatureException
- if in one-shot modeprotected void engineUpdate(byte[] b, int off, int len) throws java.security.SignatureException
engineUpdate
in class java.security.SignatureSpi
java.security.SignatureException
- if one-shot rules are violatedprotected byte[] engineSign() throws java.security.SignatureException
engineSign
in class java.security.SignatureSpi
java.security.SignatureException
private byte[] x_engineSign() throws java.security.SignatureException
java.security.SignatureException
protected boolean engineVerify(byte[] sigBytes) throws java.security.SignatureException
engineVerify
in class java.security.SignatureSpi
java.security.SignatureException
private boolean x_engineVerify(byte[] sigBytes) throws java.security.SignatureException
java.security.SignatureException
public 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_MODE
public 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_MODE
public 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_MODE
public 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_MODE
public 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_MODE
public 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_MODE
protected void engineSetParameter(java.security.spec.AlgorithmParameterSpec spec) throws java.security.InvalidAlgorithmParameterException
engineSetParameter
in class java.security.SignatureSpi
java.security.InvalidAlgorithmParameterException
- if spec is ONE_SHOT_MODE and update() already calledONE_SHOT_MODE
protected void engineSetParameter(java.lang.String param, java.lang.Object value)
engineSetParameter
in class java.security.SignatureSpi
protected java.lang.Object engineGetParameter(java.lang.String param)
engineGetParameter
in class java.security.SignatureSpi