anchor.diff:  ocsp_responses(OCSPResponseDer, ResponderCerts, Nonce) ->
       pubkey_ocsp:verify_ocsp_response(OCSPResponseDer, 
                                        ResponderCerts, Nonce).
  +
  +subject_public_key_info(Alg, PubKey) ->
  +    #'OTPSubjectPublicKeyInfo'{algorithm = Alg, subjectPublicKey = PubKey}.
  
positive.code:                                                              Entity :: term() .
  
  pem_entry_encode('SubjectPublicKeyInfo', Entity=#'RSAPublicKey'{}) ->
      Der = der_encode('RSAPublicKey', Entity),
      Spki = {'SubjectPublicKeyInfo',
              {'AlgorithmIdentifier', ?'rsaEncryption', ?DER_NULL}, Der},
      pem_entry_encode('SubjectPublicKeyInfo', Spki);
  pem_entry_encode('SubjectPublicKeyInfo',
                   {DsaInt, Params=#'Dss-Parms'{}}) when is_integer(DsaInt) ->
      KeyDer = der_encode('DSAPublicKey', DsaInt),
      ParamDer = der_encode('DSAParams', {params, Params}),
      Spki = {'SubjectPublicKeyInfo',
              {'AlgorithmIdentifier', ?'id-dsa', ParamDer}, KeyDer},
      pem_entry_encode('SubjectPublicKeyInfo', Spki);
  pem_entry_encode('SubjectPublicKeyInfo',
  		 {#'ECPoint'{point = Key}, {namedCurve, ?'id-Ed25519' = ID}}) when is_binary(Key)->
      Spki = {'SubjectPublicKeyInfo',
  	    {'AlgorithmIdentifier', ID, asn1_NOVALUE},
  	    Key},
      pem_entry_encode('SubjectPublicKeyInfo', Spki);
  pem_entry_encode('SubjectPublicKeyInfo',
  		 {#'ECPoint'{point = Key}, {namedCurve, ?'id-Ed448' = ID}}) when is_binary(Key)->
      Spki = {'SubjectPublicKeyInfo',
  	    {'AlgorithmIdentifier', ID , asn1_NOVALUE},
  	    Key},
      pem_entry_encode('SubjectPublicKeyInfo', Spki);
  pem_entry_encode('SubjectPublicKeyInfo',
  		 {#'ECPoint'{point = Key}, ECParam}) when is_binary(Key)->
      Params = der_encode('EcpkParameters',ECParam),
      Spki = {'SubjectPublicKeyInfo',
  	    {'AlgorithmIdentifier', ?'id-ecPublicKey', Params},
  	    Key},
      pem_entry_encode('SubjectPublicKeyInfo', Spki);
  pem_entry_encode(Asn1Type, Entity)  when is_atom(Asn1Type) ->
      Der = der_encode(Asn1Type, Entity),
  
negative.code: handle_pkcs_frame_error(_, _, Error) ->
      erlang:error(Error).
  
  der_priv_key_decode(#'PrivateKeyInfo'{version = v1,
                                        privateKeyAlgorithm =
                                            #'PrivateKeyInfo_privateKeyAlgorithm'{algorithm = ?'id-ecPublicKey',
                                                                                  parameters = {asn1_OPENTYPE, Parameters}},
                                        privateKey = PrivKey}) ->
      EcPrivKey = der_decode('ECPrivateKey', PrivKey),
      EcPrivKey#'ECPrivateKey'{parameters = der_decode('EcpkParameters', Parameters)};
  der_priv_key_decode(#'PrivateKeyInfo'{version = v1,
                                        privateKeyAlgorithm =#'PrivateKeyInfo_privateKeyAlgorithm'{algorithm = CurveOId},
                                        privateKey = PrivKey}) when
        CurveOId == ?'id-Ed25519'orelse
        CurveOId == ?'id-Ed448' ->
      #'ECPrivateKey'{version = 1, parameters = {namedCurve, CurveOId}, privateKey = PrivKey};
  der_priv_key_decode(#'OneAsymmetricKey'{
                         privateKeyAlgorithm = #'OneAsymmetricKey_privateKeyAlgorithm'{algorithm = CurveOId},
                         privateKey = PrivKey,
                         attributes = Attr,
                         publicKey = PubKey}) when
        CurveOId == ?'id-Ed25519'orelse
        CurveOId == ?'id-Ed448' ->
      #'ECPrivateKey'{version = 2, parameters = {namedCurve, CurveOId}, privateKey = PrivKey,
  