rings_core/session/
account.rs1use serde::Deserialize;
2use serde::Serialize;
3
4use crate::dht::Did;
5use crate::ecc::keys::AccountVerifier;
6use crate::ecc::keys::SignatureAlgorithm;
7use crate::ecc::keys::VerificationPublicKey;
8use crate::ecc::PublicKey;
9use crate::error::Error;
10use crate::error::Result;
11
12#[derive(Deserialize, Serialize, PartialEq, Eq, Debug, Clone)]
17pub enum Account {
18 Secp256k1(Did),
20 Secp256r1(PublicKey<33>),
22 EIP191(Did),
24 BIP137(Did),
26 Ed25519(PublicKey<33>),
28 Bls12381(PublicKey<48>),
30}
31
32impl TryFrom<(String, String)> for Account {
33 type Error = Error;
34
35 fn try_from((account_entity, account_type): (String, String)) -> Result<Self> {
36 match AccountVerifier::from_account_parts(&account_entity, &account_type)? {
37 AccountVerifier::Recoverable {
38 algorithm: SignatureAlgorithm::Secp256k1,
39 did,
40 } => Ok(Account::Secp256k1(did)),
41 AccountVerifier::Recoverable {
42 algorithm: SignatureAlgorithm::Eip191,
43 did,
44 } => Ok(Account::EIP191(did)),
45 AccountVerifier::Recoverable {
46 algorithm: SignatureAlgorithm::Bip137,
47 did,
48 } => Ok(Account::BIP137(did)),
49 AccountVerifier::PublicKey(VerificationPublicKey::Secp256r1(pk)) => {
50 Ok(Account::Secp256r1(pk))
51 }
52 AccountVerifier::PublicKey(VerificationPublicKey::Ed25519(pk)) => {
53 Ok(Account::Ed25519(pk))
54 }
55 AccountVerifier::PublicKey(VerificationPublicKey::Bls12381(pk)) => {
56 Ok(Account::Bls12381(pk))
57 }
58 _ => Err(Error::UnknownAccount),
59 }
60 }
61}
62
63impl Account {
64 pub(super) fn account_verifier(&self) -> AccountVerifier {
65 match self {
66 Self::Secp256k1(did) => AccountVerifier::Recoverable {
67 algorithm: SignatureAlgorithm::Secp256k1,
68 did: *did,
69 },
70 Self::EIP191(did) => AccountVerifier::Recoverable {
71 algorithm: SignatureAlgorithm::Eip191,
72 did: *did,
73 },
74 Self::BIP137(did) => AccountVerifier::Recoverable {
75 algorithm: SignatureAlgorithm::Bip137,
76 did: *did,
77 },
78 Self::Secp256r1(pk) => {
79 AccountVerifier::PublicKey(VerificationPublicKey::Secp256r1(*pk))
80 }
81 Self::Ed25519(pk) => AccountVerifier::PublicKey(VerificationPublicKey::Ed25519(*pk)),
82 Self::Bls12381(pk) => AccountVerifier::PublicKey(VerificationPublicKey::Bls12381(*pk)),
83 }
84 }
85}