| package org.bouncycastle.jcajce.provider.asymmetric.dstu; |
| |
| import java.io.IOException; |
| import java.security.SignatureException; |
| |
| import org.bouncycastle.asn1.ASN1OctetString; |
| import org.bouncycastle.asn1.DEROctetString; |
| |
| public class SignatureSpiLe |
| extends SignatureSpi |
| { |
| void reverseBytes(byte[] bytes) |
| { |
| byte tmp; |
| |
| for (int i = 0; i < bytes.length / 2; i++) |
| { |
| tmp = bytes[i]; |
| bytes[i] = bytes[bytes.length - 1 - i]; |
| bytes[bytes.length - 1 - i] = tmp; |
| } |
| } |
| |
| protected byte[] engineSign() |
| throws SignatureException |
| { |
| byte[] signature = ASN1OctetString.getInstance(super.engineSign()).getOctets(); |
| reverseBytes(signature); |
| try |
| { |
| return (new DEROctetString(signature)).getEncoded(); |
| } |
| catch (Exception e) |
| { |
| throw new SignatureException(e.toString()); |
| } |
| } |
| |
| protected boolean engineVerify( |
| byte[] sigBytes) |
| throws SignatureException |
| { |
| byte[] bytes = null; |
| |
| try |
| { |
| bytes = ((ASN1OctetString)ASN1OctetString.fromByteArray(sigBytes)).getOctets(); |
| } |
| catch (IOException e) |
| { |
| throw new SignatureException("error decoding signature bytes."); |
| } |
| |
| reverseBytes(bytes); |
| |
| try |
| { |
| return super.engineVerify((new DEROctetString(bytes)).getEncoded()); |
| } |
| catch (SignatureException e) |
| { |
| throw e; |
| } |
| catch (Exception e) |
| { |
| throw new SignatureException(e.toString()); |
| } |
| } |
| } |