--- title: "DID Generation and Management" description: "Learn how to generate and manage Decentralized Identifiers (DIDs) using advanced crypto interfaces" sidebarTitle: "Identity Generation" icon: "signature" --- # DID Generation Patterns The Sonr project provides a robust and flexible DID (Decentralized Identifier) generation system supporting multiple key types and cryptographic methods. ## Supported Key Types The `didkey.go` interface supports the following key types: - RSA Public Keys - Ed25519 Public Keys - Secp256k1 Public Keys ## Basic DID Generation ### Creating a DID from a Public Key ```go import ( "github.com/libp2p/go-libp2p/core/crypto" "github.com/sonr-io/crypto/keys" ) // Generate a new key pair privateKey, publicKey, err := crypto.GenerateKeyPair(crypto.Ed25519, -1) // Create a DID did, err := keys.NewDID(publicKey) ``` ### Parsing an Existing DID ```go // Parse a DID string did, err := keys.Parse("did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGTsyDFWYviJr4") ``` ## Advanced DID Operations ### Address Derivation ```go // Get a blockchain-compatible address from a DID address, err := did.Address() ``` ### Compressed Public Key Retrieval ```go // Get a compressed public key (for Secp256k1) compressedPubKey, err := did.CompressedPubKey() ``` ## MPC Enclave DID Generation For MPC (Multi-Party Computation) enclaves, use a specialized method: ```go // Create a DID from MPC enclave public key bytes did, err := keys.NewFromMPCPubKey(enclavePublicKeyBytes) ``` ## DID Validation ```go // Validate a DID format err := keys.ValidateFormat("did:key:example123") ``` ## Multicodec Support The library supports various multicodec prefixes for different key types: - RSA: `0x1205` - Ed25519: `0xed` - Secp256k1: `0xe7` ## Security Considerations - Always generate keys using cryptographically secure methods - Validate DIDs before using them in critical operations - Use the appropriate key type for your security requirements ## Example: Complete DID Workflow ```go package main import ( "fmt" "github.com/libp2p/go-libp2p/core/crypto" "github.com/sonr-io/crypto/keys" ) func main() { // Generate a new key pair privateKey, publicKey, err := crypto.GenerateKeyPair(crypto.Ed25519, -1) if err != nil { panic(err) } // Create a DID did, err := keys.NewDID(publicKey) if err != nil { panic(err) } // Get the DID string didString := did.String() fmt.Println("Generated DID:", didString) // Derive blockchain address address, err := did.Address() if err != nil { panic(err) } fmt.Println("Blockchain Address:", address) } ``` ## Compatibility and Interoperability The Sonr DID implementation follows the W3C DID specification, ensuring broad compatibility with other decentralized identity systems.