Skip to content

Commit

Permalink
algos
Browse files Browse the repository at this point in the history
  • Loading branch information
5HT committed Jul 5, 2023
1 parent 5b88980 commit c6a7cf1
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 35 deletions.
93 changes: 93 additions & 0 deletions lib/alg.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
defmodule CA.ALG do

def algorithms() do
[
{:'id-gost28147-ofb', {1,2,804,2,1,1,1,1,1,1,2}},
{:'id-gost28147-cfb', {1,2,804,2,1,1,1,1,1,1,3}},
{:'id-gost28147-wrap', {1,2,804,2,1,1,1,1,1,1,5}},
{:'id-Dstu7624cfb-x256', {1,2,804,2,1,1,1,1,1,3,3,2}},
{:'id-Dstu7624ofb-x256', {1,2,804,2,1,1,1,1,1,3,6,2}},
{:'id-ecPublicKey', {1,2,840,10045,2,1}},
{:secp192r1, {1,2,840,10045,3,1,1}},
{:secp256r1, {1,2,840,10045,3,1,7}},
{:'ecdsa-with-SHA224', {1,2,840,10045,4,3,1}},
{:'ecdsa-with-SHA256', {1,2,840,10045,4,3,2}},
{:'ecdsa-with-SHA384', {1,2,840,10045,4,3,3}},
{:'ecdsa-with-SHA512', {1,2,840,10045,4,3,4}},
{:'ecdsa-with-SHA1', {1,2,840,10045,4,1}},
{:'id-dsa', {1,2,840,10040,4,1}},
{:'dsa-with-sha1', {1,2,840,10040,4,3}},
{:rsaEncryption, {1,2,840,113549,1,1,1}},
{:md2WithRSAEncryption, {1,2,840,113549,1,1,2}},
{:md5WithRSAEncryption, {1,2,840,113549,1,1,4}},
{:sha1WithRSAEncryption, {1,2,840,113549,1,1,5}},
{:'id-PBKDF2', {1,2,840,113549,1,5,12}},
{:'smime-alg', {1,2,840,113549,1,9,16,3}},
{:'id-alg-ESDH', {1,2,840,113549,1,9,16,3,5}},
{:'id-alg-SSDH', {1,2,840,113549,1,9,16,3,10}},
{:'id-alg-CMS3DESwrap', {1,2,840,113549,1,9,16,3,6}},
{:'id-alg-CMSRC2wrap', {1,2,840,113549,1,9,16,3,7}},
{:'id-md2', {1,2,840,113549,2,2}},
{:'id-md5', {1,2,840,113549,2,5}},
{:'id-hmacWithSHA224', {1,2,840,113549,2,8}},
{:'id-hmacWithSHA256', {1,2,840,113549,2,9}},
{:'id-hmacWithSHA384', {1,2,840,113549,2,10}},
{:'id-hmacWithSHA512', {1,2,840,113549,2,11}},
{:'rc2-cbc', {1,2,840,113549,3,2}},
{:'des-ede3-cbc', {1,2,840,113549,3,7}},
{:keyExchangeAlgorithm, {2,16,840,1,101,2,1,1,22}},
{:'id-aes128-CBC', {2,16,840,1,101,3,4,1,2}},
{:'id-aes128-wrap', {2,16,840,1,101,3,4,1,5}},
{:'id-aes128-GCM', {2,16,840,1,101,3,4,1,6}},
{:'id-aes128-CCM', {2,16,840,1,101,3,4,1,7}},
{:'id-aes192-CBC', {2,16,840,1,101,3,4,1,22}},
{:'id-aes192-wrap', {2,16,840,1,101,3,4,1,25}},
{:'id-aes192-GCM', {2,16,840,1,101,3,4,1,26}},
{:'id-aes192-CCM', {2,16,840,1,101,3,4,1,27}},
{:'id-aes256-CBC', {2,16,840,1,101,3,4,1,42}},
{:'id-aes256-wrap', {2,16,840,1,101,3,4,1,45}},
{:'id-aes256-GCM', {2,16,840,1,101,3,4,1,46}},
{:'id-aes256-CCM', {2,16,840,1,101,3,4,1,47}},
{:'dsa-with-sha224', {2,16,840,1,101,3,4,3,1}},
{:'dsa-with-sha256', {2,16,840,1,101,3,4,3,2}},
{:'dhSinglePass-stdDH-hkdf-sha256-scheme', {1,2,840,113549,1,9,16,3,19}},
{:'dhSinglePass-stdDH-hkdf-sha384-scheme', {1,2,840,113549,1,9,16,3,20}},
{:'dhSinglePass-stdDH-hkdf-sha512-scheme', {1,2,840,113549,1,9,16,3,21}},
{:defaultPBKDF2, {1,3,6,1,5,5,8,1,2}},
{:'hMAC-SHA1', {1,3,6,1,5,5,8,1,2}},
{:'id-sha1', {1,3,14,3,2,26}},
{:sect163k1, {1,3,132,0,1}},
{:sect163r2, {1,3,132,0,15}},
{:secp224r1, {1,3,132,0,33}},
{:sect233k1, {1,3,132,0,26}},
{:sect233r1, {1,3,132,0,27}},
{:sect283k1, {1,3,132,0,16}},
{:sect283r1, {1,3,132,0,17}},
{:secp384r1, {1,3,132,0,34}},
{:sect409k1, {1,3,132,0,36}},
{:sect409r1, {1,3,132,0,37}},
{:secp521r1, {1,3,132,0,35}},
{:sect571k1, {1,3,132,0,38}},
{:sect571r1, {1,3,132,0,39}},
{:'secg-scheme', {1,3,132,1}},
{:'dhSinglePass-stdDH-sha224kdf-scheme', {1,3,132,1,11,0}},
{:'dhSinglePass-stdDH-sha256kdf-scheme', {1,3,132,1,11,1}},
{:'dhSinglePass-stdDH-sha384kdf-scheme', {1,3,132,1,11,2}},
{:'dhSinglePass-stdDH-sha512kdf-scheme', {1,3,132,1,11,3}},
{:'id-ecDH', {1,3,132,1,12}},
{:'id-ecMQV', {1,3,132,1,13}},
{:'dhSinglePass-cofactorDH-sha224kdf-scheme', {1,3,132,1,14,0}},
{:'dhSinglePass-cofactorDH-sha256kdf-scheme', {1,3,132,1,14,1}},
{:'dhSinglePass-cofactorDH-sha384kdf-scheme', {1,3,132,1,14,2}},
{:'dhSinglePass-cofactorDH-sha512kdf-scheme', {1,3,132,1,14,3}},
{:'mqvSinglePass-sha224kdf-scheme', {1,3,132,1,15,0}},
{:'mqvSinglePass-sha256kdf-scheme', {1,3,132,1,15,1}},
{:'mqvSinglePass-sha384kdf-scheme', {1,3,132,1,15,2}},
{:'mqvSinglePass-sha512kdf-scheme', {1,3,132,1,15,3}},
{:'x9-63-scheme', {1,3,133,16,840,63,0}},
{:'dhSinglePass-stdDH-sha1kdf-scheme', {1,3,133,16,840,63,0,2}},
{:'dhSinglePass-cofactorDH-sha1kdf-scheme', {1,3,133,16,840,63,0,3}},
{:'mqvSinglePass-sha1kdf-scheme', {1,3,133,16,840,63,0,16}},
]
end
end
48 changes: 13 additions & 35 deletions lib/sec.ex
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
defmodule CA.CRYPTO do

def testCMSX509() do
{:ok,base} = :file.read_file "priv/encrypted.txt" ; [_,s] = :string.split base, "\n\n"
:'CryptographicMessageSyntax-2010'.decode(:ContentInfo, :base64.decode(s))
end
def privat(name), do: :erlang.element(3,:public_key.pem_entry_decode(readPEM("priv/certs/",name)))
def public(name), do: :erlang.element(3,:erlang.element(8, :erlang.element(2, :public_key.pem_entry_decode(readPEM("priv/certs/",name)))))
def readPEM(folder, name), do: :erlang.hd(:public_key.pem_decode(:erlang.element(2, :file.read_file(folder <> name))))
def e(x,y), do: :erlang.element(x,y)
def privat(name), do: e(3,:public_key.pem_entry_decode(readPEM("priv/certs/",name)))
def public(name), do: e(3,e(8, e(2, :public_key.pem_entry_decode(readPEM("priv/certs/",name)))))
def readPEM(folder, name), do: hd(:public_key.pem_decode(e(2, :file.read_file(folder <> name))))
def decryptCBC(cipher, secret, iv), do: :crypto.crypto_one_time(:aes_256_cbc,secret,iv,cipher,[{:encrypt,false}])
def shared(pub, key, scheme), do: :crypto.compute_key(:ecdh, pub, key, scheme)
def eccCMS(ukm, len), do: {:'ECC-CMS-SharedInfo', {:'KeyWrapAlgorithm',{2,16,840,1,101,3,4,1,45},:asn1_NOVALUE}, ukm, <<len::32>>}

def testSMIME() do
{:ok,base} = :file.read_file "priv/encrypted.txt" ; [_,s] = :string.split base, "\n\n"
:'CryptographicMessageSyntax-2010'.decode(:ContentInfo, :base64.decode(s))
end

def testCMS() do
maximK = privat "maxim.key"
maximP = public "maxim.pem"
cms = testCMSX509
privateKey = privat "maxim.key"
scheme = :prime256v1
{_,{:ContentInfo,_,{:EnvelopedData,_,_,x,{:EncryptedContentInfo,_,{_,_,{_,iv}},data},_}}} = cms
[{:kari,{_,:v3,{_,{_,_,publicKey}},ukm,_,[{_,_,encryptedKey}]}}|y] = x
sharedKey = shared(publicKey,maximK,scheme)
{_,{:ContentInfo,_,{:EnvelopedData,_,_,x,{:EncryptedContentInfo,_,{_,_,{_,iv}},data},_}}} = testSMIME()
[{:kari,{_,:v3,{_,{_,_,publicKey}},ukm,_,[{_,_,encryptedKey}]}}|_] = x
sharedKey = shared(publicKey,privateKey,scheme)
{_,content} = :'CMSECCAlgs-2009-02'.encode(:'ECC-CMS-SharedInfo', eccCMS(ukm, 256))
kdf = KDF.derive(:sha512, sharedKey, 32, content)
unwrap = :aes_kw.unwrap(encryptedKey, kdf)
Expand Down Expand Up @@ -56,26 +56,4 @@ defmodule CA.CRYPTO do
decryptCBC(data, unwrap, iv)
end

def test() do
scheme = :prime256v1
{maximK,key} = privat "maxim"
{maximP,pub} = public "maxim"
cms = testCMSX509
:io.format '~p~n', [cms]
{_,{:ContentInfo,_,{:EnvelopedData,_,_,x,{:EncryptedContentInfo,_,{_,_,{_,iv}},msg},_}}} = cms
[{:kari,{_,:v3,{_,{_,_,publicKey}},ukm,_,[{_,_,encryptedKey}]}}|y] = x
maximS = shared(publicKey,maximK,scheme)
:io.format '~p~n', [publicKey]
[ cert: pub,
priv: key,
publicKey: maximP,
privateKey: maximK,
sharedKey: maximS,
ukm: ukm,
senderPublic: publicKey,
encryptedKey: encryptedKey,
encryptedMessage: msg,
iv: iv]
end

end

0 comments on commit c6a7cf1

Please sign in to comment.