/*
Copyright 2006 IT Practice A/S
Copyright 2006 TDC Totalløsninger A/S
Copyright 2006 Jens Bo Friis
Copyright 2006 Preben Rosendal Valeur
Copyright 2006 Carsten Raskgaard
This file is part of OpenSign.
OpenSign is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
OpenSign is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with OpenOcesAPI; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Note to developers:
If you add code to this file, please take a minute to add an additional
copyright statement above and an additional
@author statement below.
*/
/* $Id: MicrosoftCryptoApi.java,v 1.5 2006/04/17 21:08:27 cara Exp $ */
package org.openoces.opensign.wrappers.microsoftcryptoapi;
import java.util.Date;
import java.math.BigInteger;
/**
* This class implements the java stub of the capi wrapper
*
* @author Carsten Raskgaard <carsten@raskgaard.dk>
*/
public class MicrosoftCryptoApi
{
public native void hello();
public native byte[][] getCertificatesInSystemStore(String storeName);
public native byte[] signMessage(byte[] toBeSigned, byte[] certificate);
public native byte[] signHash(byte[] toBeSigned, byte[] certificate);
public native int getCertificateVersion(byte[] certificate);
public native byte[] digest(byte[] data, String algorithm);
public native int getLastErrorCode();
public native int getMajorVersion();
public native int getMinorVersion();
public native int getKeyUsage(byte[] certificate);
private native String getSubjectDn(byte[] certificate);
private native String getIssuerDn(byte[] certificate);
private native byte[] getSerialNumber(byte[] certificate);
private native long getNotAfter(byte[] certificate);
private native long getNotBefore(byte[] certificate);
/*
* static { System.loadLibrary("MicrosoftCryptoApi_0_2"); }
*/
public Date getNotBeforeDate(byte[] certificate)
{
return new Date(getNotBefore(certificate));
}
public Date getNotAfterDate(byte[] certificate)
{
return new Date(getNotAfter(certificate));
}
public BigInteger getSerialNumberBigInteger(byte[] certificate)
{
byte[] serialNumber = getSerialNumber(certificate);
/* convert from little endian to big endian */
for (int i = 0; i < (serialNumber.length / 2); i++)
{
int lowerIdx = i;
int upperIdx = serialNumber.length - i - 1;
byte b = serialNumber[lowerIdx];
serialNumber[lowerIdx] = serialNumber[upperIdx];
serialNumber[upperIdx] = b;
}
return new BigInteger(serialNumber);
}
public String getSubjectDnString(byte[] certificate)
{
String s = getSubjectDn(certificate);
return s == null ? null : s.substring(0, s.length() - 1);
}
public String getIssuerDnString(byte[] certificate)
{
String s = getIssuerDn(certificate);
return s == null ? null : s.substring(0, s.length() - 1);
}
}