SignatureRSA.java
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 package com.jcraft.jsch.jce;
00031
00032 import java.math.BigInteger;
00033 import java.security.*;
00034 import java.security.spec.*;
00035
00036 public class SignatureRSA implements com.jcraft.jsch.SignatureRSA{
00037
00038 java.security.Signature signature;
00039 KeyFactory keyFactory;
00040
00041 public void init() throws Exception{
00042 signature=java.security.Signature.getInstance("SHA1withRSA");
00043 keyFactory=KeyFactory.getInstance("RSA");
00044 }
00045 public void setPubKey(byte[] e, byte[] n) throws Exception{
00046 RSAPublicKeySpec rsaPubKeySpec =
00047 new RSAPublicKeySpec(new BigInteger(n),
00048 new BigInteger(e));
00049 PublicKey pubKey=keyFactory.generatePublic(rsaPubKeySpec);
00050 signature.initVerify(pubKey);
00051 }
00052 public void setPrvKey(byte[] d, byte[] n) throws Exception{
00053 RSAPrivateKeySpec rsaPrivKeySpec =
00054 new RSAPrivateKeySpec(new BigInteger(n),
00055 new BigInteger(d));
00056 PrivateKey prvKey = keyFactory.generatePrivate(rsaPrivKeySpec);
00057 signature.initSign(prvKey);
00058 }
00059 public byte[] sign() throws Exception{
00060 byte[] sig=signature.sign();
00061 return sig;
00062 }
00063 public void update(byte[] foo) throws Exception{
00064 signature.update(foo);
00065 }
00066 public boolean verify(byte[] sig) throws Exception{
00067 int i=0;
00068 int j=0;
00069 byte[] tmp;
00070
00071 if(sig[0]==0 && sig[1]==0 && sig[2]==0){
00072 j=((sig[i++]<<24)&0xff000000)|((sig[i++]<<16)&0x00ff0000)|
00073 ((sig[i++]<<8)&0x0000ff00)|((sig[i++])&0x000000ff);
00074 i+=j;
00075 j=((sig[i++]<<24)&0xff000000)|((sig[i++]<<16)&0x00ff0000)|
00076 ((sig[i++]<<8)&0x0000ff00)|((sig[i++])&0x000000ff);
00077 tmp=new byte[j];
00078 System.arraycopy(sig, i, tmp, 0, j); sig=tmp;
00079 }
00080
00081 return signature.verify(sig);
00082 }
00083 }