1 2 29 30 package com.jcraft.jsch.jce; 31 32 import java.math.BigInteger ; 33 import java.security.*; 34 import java.security.spec.*; 35 36 public class SignatureRSA implements com.jcraft.jsch.SignatureRSA{ 37 38 java.security.Signature signature; 39 KeyFactory keyFactory; 40 41 public void init() throws Exception { 42 signature=java.security.Signature.getInstance("SHA1withRSA"); 43 keyFactory=KeyFactory.getInstance("RSA"); 44 } 45 public void setPubKey(byte[] e, byte[] n) throws Exception { 46 RSAPublicKeySpec rsaPubKeySpec = 47 new RSAPublicKeySpec(new BigInteger (n), 48 new BigInteger (e)); 49 PublicKey pubKey=keyFactory.generatePublic(rsaPubKeySpec); 50 signature.initVerify(pubKey); 51 } 52 public void setPrvKey(byte[] d, byte[] n) throws Exception { 53 RSAPrivateKeySpec rsaPrivKeySpec = 54 new RSAPrivateKeySpec(new BigInteger (n), 55 new BigInteger (d)); 56 PrivateKey prvKey = keyFactory.generatePrivate(rsaPrivKeySpec); 57 signature.initSign(prvKey); 58 } 59 public byte[] sign() throws Exception { 60 byte[] sig=signature.sign(); 61 return sig; 62 } 63 public void update(byte[] foo) throws Exception { 64 signature.update(foo); 65 } 66 public boolean verify(byte[] sig) throws Exception { 67 int i=0; 68 int j=0; 69 byte[] tmp; 70 71 if(sig[0]==0 && sig[1]==0 && sig[2]==0){ 72 j=((sig[i++]<<24)&0xff000000)|((sig[i++]<<16)&0x00ff0000)| 73 ((sig[i++]<<8)&0x0000ff00)|((sig[i++])&0x000000ff); 74 i+=j; 75 j=((sig[i++]<<24)&0xff000000)|((sig[i++]<<16)&0x00ff0000)| 76 ((sig[i++]<<8)&0x0000ff00)|((sig[i++])&0x000000ff); 77 tmp=new byte[j]; 78 System.arraycopy(sig, i, tmp, 0, j); sig=tmp; 79 } 80 return signature.verify(sig); 82 } 83 } 84 | Popular Tags |