Class IssacPFX

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public class IssacPFX
    extends java.lang.Object
    implements java.io.Closeable
    PKCS#12 (PFX) 를 처리하는 클래스.

    IssacCERTIFICATE 클래스의 PKCS#12 함수들은 사용방법도 고정되어 있고, 함수가 있어야 할 위치도 맞지 않다.
    그래서 해당 기능을 구현한 클래스를 다시 만들었으니 이 기능을 사용하도록 한다.

    See Also:
    IssacCERTIFICATE
    • Field Detail

      • ISSACAPI_BAGTYPE_KEY

        public static final int ISSACAPI_BAGTYPE_KEY
        개인키 (PKCS #8 - PrivateKeyInfo)
        See Also:
        Constant Field Values
      • ISSACAPI_BAGTYPE_KEY_ENCRYPTED

        public static final int ISSACAPI_BAGTYPE_KEY_ENCRYPTED
        암호화 된 개인키 (PKCS #8 - EncryptedPrivateKeyInfo)
        See Also:
        Constant Field Values
      • ISSACAPI_BAGTYPE_CERT

        public static final int ISSACAPI_BAGTYPE_CERT
        인증서 형식과 인증서 (X.509 Certificate. SDSI 는 지원하지 않음)
        See Also:
        Constant Field Values
      • ISSACAPI_BAGTYPE_CRL

        public static final int ISSACAPI_BAGTYPE_CRL
        인증서 폐지 목록 (X.509 CRL)
        See Also:
        Constant Field Values
      • ISSACAPI_BAGTYPE_SECRET

        public static final int ISSACAPI_BAGTYPE_SECRET
        OID 에 의존적인 비밀정보 (지원하지 않음)
        See Also:
        Constant Field Values
      • ISSACAPI_BAGTYPE_SAFE_CONTENTS

        public static final int ISSACAPI_BAGTYPE_SAFE_CONTENTS
        다른 SafeContents 들을 최상위 레벨의 SafeContents.
        See Also:
        Constant Field Values
    • Method Detail

      • encode

        public byte[] encode​(byte[] pfxPassword,
                             int hashAlg,
                             int pbeEncAlg,
                             byte[] salt,
                             int iteration)
                      throws IssacSDKException
        입력된 PFX 데이터들을 인코딩한다.
        Parameters:
        pfxPassword - PFX 비밀번호
        hashAlg - PFX 암호화에 사용할 해시 알고리즘 [ IssacHash.ISSACAPI_SHA1 ]
        pbeEncAlg - PFX 암호화에 사용할 알고리즘 [ IssacSECONTEXT.ISSACAPI_SEED ]
        salt - PFX 암호화에 사용할 salt 값
        iteration - PFX 암호화에 사용할 iteration 횟수
        Returns:
        PFX 데이터
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • encode

        public byte[] encode​(java.lang.String pfxPassword,
                             int hashAlg,
                             int pbeEncAlg,
                             byte[] salt,
                             int iteration)
                      throws IssacSDKException
        입력된 PFX 데이터들을 인코딩한다.
        Parameters:
        pfxPassword - PFX 비밀번호
        hashAlg - PFX 암호화에 사용할 해시 알고리즘 [ IssacHash.ISSACAPI_SHA1 ]
        pbeEncAlg - PFX 암호화에 사용할 알고리즘 [ IssacSECONTEXT.ISSACAPI_SEED ]
        salt - PFX 암호화에 사용할 salt 값
        iteration - PFX 암호화에 사용할 iteration 횟수
        Returns:
        PFX 데이터
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • decode

        public void decode​(byte[] pfxData,
                           java.lang.String pfxPassword)
                    throws IssacSDKException,
                           java.lang.IllegalArgumentException
        PFX 데이터를 디코딩한다.

        디코딩 이후 다른 메서드들을 이용하여 pfx 데이터들을 컨트롤 할 수 있다.

        Parameters:
        pfxData - PFX 바이너리 데이터
        pfxPassword - PFX의 비밀번호
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
        java.lang.IllegalArgumentException - 필요한 입력값이 없음
      • addCerts

        public void addCerts​(IssacCERTIFICATES certs)
                      throws IssacSDKException
        PFX 에 인증서들을 추가한다.
        Parameters:
        certs - 인증서들 (주로 CA 인증서 체인에 사용)
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • addCertAndKey

        public void addCertAndKey​(IssacCERTIFICATE cert,
                                  IssacPRIVATEKEY priKey,
                                  java.lang.String password,
                                  int pbeEncAlg,
                                  byte[] salt,
                                  int iteration)
                           throws IssacSDKException
        PFX 에 인증서와 개인키를 입력받은 비밀번호로 암호화(PBE)하여 추가한다.
        Parameters:
        cert - 인증서
        priKey - 개인키
        password - 개인키 암호화(PBE)에 사용할 비밀번호
        pbeEncAlg - 개인키 암호화(PBE)에 사용할 알고리즘 [IssacSECONTEXT.ISSACAPI_SEED]
        salt - 개인키 암호화(PBE)에 사용할 salt 값
        iteration - 개인키 암호화(PBE)에 사용할 iteration 횟수
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • addCertAndKey

        public void addCertAndKey​(IssacCERTIFICATE cert,
                                  IssacPRIVATEKEY priKey,
                                  byte[] password,
                                  int pbeEncAlg,
                                  byte[] salt,
                                  int iteration)
                           throws IssacSDKException
        PFX 에 인증서와 개인키를 입력받은 비밀번호로 암호화(PBE)하여 추가한다.
        Parameters:
        cert - 인증서
        priKey - 개인키
        password - 개인키 암호화(PBE)에 사용할 비밀번호
        pbeEncAlg - 개인키 암호화(PBE)에 사용할 알고리즘 [IssacSECONTEXT.ISSACAPI_SEED]
        salt - 개인키 암호화(PBE)에 사용할 salt 값
        iteration - 개인키 암호화(PBE)에 사용할 iteration 횟수
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • addCertAndPrivateKeyInfo

        public void addCertAndPrivateKeyInfo​(IssacCERTIFICATE cert,
                                             byte[] pki)
                                      throws IssacSDKException
        PFX 에 인증서와 암호화되지 않은 개인키를 추가한다.
        Parameters:
        cert - 인증서
        pki - 암호화되지 않은 개인키
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • addCertAndEncryptedPrivateKeyInfo

        public void addCertAndEncryptedPrivateKeyInfo​(IssacCERTIFICATE cert,
                                                      byte[] epki)
                                               throws IssacSDKException
        PFX 에 인증서와 암호화 된 개인키를 추가한다.
        Parameters:
        cert - 인증서
        epki - 암호화 된 개인키
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • getLocalKeyIDs

        public java.util.Set<byte[]> getLocalKeyIDs()
                                             throws IssacSDKException
        pfx에서 사용되는 LocalKeyID들을 가져온다.

        이 값들은 키쌍(인증서, 개인키)을 갖는 데이터들을 가져올 때 활용된다.

        Returns:
        LocalKeyID들의 Set Collection
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • getValueWithIndex

        public byte[] getValueWithIndex​(int bagIndex)
                                 throws IssacSDKException
        SafeBag 의 데이터를 가져온다.
        Parameters:
        bagIndex - SafeBag 인덱스
        Returns:
        해당 데이터
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • getValueWithType

        public byte[] getValueWithType​(int bagType)
                                throws IssacSDKException
        SafeBag 의 데이터를 가져온다.
        Parameters:
        bagType - SafeBag 타입. 이 클래스에 정의된 상수(ex. ISSACAPI_BAGTYPE_KEY) 입력
        Returns:
        해당 데이터
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • getValueWithType

        public byte[] getValueWithType​(int bagType,
                                       byte[] localKeyID)
                                throws IssacSDKException,
                                       java.lang.IllegalArgumentException
        SafeBag 의 데이터를 가져온다.
        Parameters:
        bagType - SafeBag 타입. 이 클래스에 정의된 상수(ex. ISSACAPI_BAGTYPE_KEY) 입력
        localKeyID - 키쌍을 구분하기 위한 LocalKeyID
        Returns:
        해당 데이터
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
        java.lang.IllegalArgumentException - 필요한 입력값이 없음
      • hasBag

        public boolean hasBag​(int bagType)
                       throws IssacSDKException
        SafeBag 이 존재하는지 확인한다.
        Parameters:
        bagType - SafeBag 타입. 이 클래스에 정의된 상수(ex. ISSACAPI_BAGTYPE_KEY) 입력
        Returns:
        해당 Bag 이 존재하는지 여부
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • hasBag

        public boolean hasBag​(int bagType,
                              byte[] localKeyID)
                       throws IssacSDKException,
                              java.lang.IllegalArgumentException
        SafeBag 이 존재하는지 확인한다.
        Parameters:
        bagType - SafeBag 타입. 이 클래스에 정의된 상수(ex. ISSACAPI_BAGTYPE_KEY) 입력
        localKeyID - 키쌍을 구분하기 위한 LocalKeyID
        Returns:
        해당 Bag 이 존재하는지 여부
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
        java.lang.IllegalArgumentException - 필요한 입력값이 없음
      • getCertificate

        public IssacCERTIFICATE getCertificate​(byte[] localKeyID)
                                        throws IssacSDKException,
                                               java.lang.IllegalArgumentException
        LocalKeyID가 존재하는 (일치하는 개인키가 있는) 인증서를 가져온다.
        Parameters:
        localKeyID - 키쌍을 구분하기 위한 LocalKeyID
        Returns:
        해당 인증서
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
        java.lang.IllegalArgumentException - 필요한 입력값이 없음
      • getPrivateKey

        public IssacPRIVATEKEY getPrivateKey​(byte[] localKeyID)
                                      throws IssacSDKException,
                                             java.lang.IllegalArgumentException
        LocalKeyID가 존재하는 (일치하는 인증서가 있는) 암호화 되지 않은 개인키를 가져온다.
        Parameters:
        localKeyID - 키쌍을 구분하기 위한 LocalKeyID
        Returns:
        해당 개인키
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
        java.lang.IllegalArgumentException - 필요한 입력값이 없음
      • getPrivateKey

        public IssacPRIVATEKEY getPrivateKey​(byte[] localKeyID,
                                             java.lang.String privateKeyPassword)
                                      throws IssacSDKException,
                                             java.lang.IllegalArgumentException
        LocalKeyID가 존재하는 (일치하는 인증서가 있는) 암호화 된 개인키를 가져온다.
        Parameters:
        localKeyID - 키쌍을 구분하기 위한 LocalKeyID
        privateKeyPassword - 개인키 비밀번호
        Returns:
        해당 개인키
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
        java.lang.IllegalArgumentException - 필요한 입력값이 없음
      • getPrivateKey

        public IssacPRIVATEKEY getPrivateKey​(byte[] localKeyID,
                                             byte[] privateKeyPassword)
                                      throws IssacSDKException,
                                             java.lang.IllegalArgumentException
        LocalKeyID가 존재하는 (일치하는 인증서가 있는) 암호화 된 개인키를 가져온다.
        Parameters:
        localKeyID - 키쌍을 구분하기 위한 LocalKeyID
        privateKeyPassword - 개인키 비밀번호
        Returns:
        해당 개인키
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
        java.lang.IllegalArgumentException - 필요한 입력값이 없음
      • getOtherCertificates

        public IssacCERTIFICATES getOtherCertificates()
                                               throws IssacSDKException
        LocalKeyID가 존재하지 않는 인증서들을 가져온다. (IssacCERTIFICATES 형식)

        이런 인증서들은 일반적으로 체인 검증을 위한 CA 인증서들이다.

        Returns:
        IssacCERTIFICATES 형식의 인증서 목록 (사용 후 close() 를 해야한다)
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • getOtherCertificatesSet

        public java.util.Set<IssacCERTIFICATE> getOtherCertificatesSet()
                                                                throws IssacSDKException
        LocalKeyID가 존재하지 않는 인증서들을 가져온다. (Set 형식)

        이런 인증서들은 일반적으로 체인 검증을 위한 CA 인증서들이다.

        Returns:
        인증서들의 Set Collection (사용 후 deleteOtherCertificatesSet() 를 이용하여 각각의 인증서를 close() 해야한다)
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • deleteOtherCertificatesSet

        public static void deleteOtherCertificatesSet​(java.util.Set<IssacCERTIFICATE> otherCerts)
                                               throws IssacSDKException
        Set 에 포함된 각각의 인증서들을 close 한다. 외부에서 직접 close() 해도 무방하다.
        Parameters:
        otherCerts - 인증서들의 Set Collection
        Throws:
        IssacSDKException - 오류 시 JNI에서 발생시키는 예외
      • delete

        public void delete()
                    throws IssacSDKException
        Deprecated.
        Resource Leak 의 효율적인 관리를 위해 close() 를 사용할 것을 권장함.
        이 pfx를 메모리에서 삭제한다.
        Throws:
        IssacSDKException
      • close

        public void close()
                   throws IssacSDKException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        IssacSDKException