Sample code for 30+ languages & platforms
DataFlex

Ed25519 Key Exchange (Shared Secret)

See more Ed25519 Examples

Demonstrates how to create an Ed25519 shared secret for use in key exchange.

Note: This example requires Chilkat v9.5.0.83 or greater.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    String sAlicePrivKey
    String sBobPubKey
    Variant vPrivKey
    Handle hoPrivKey
    Variant vPubKey
    Handle hoPubKey
    Handle hoEddsa
    String sSharedSecret
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // Alice's private key, a:
    //     77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a
    // Alice's public key, X25519(a, 9):
    //     8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a
    // Bob's private key, b:
    //     5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb
    // Bob's public key, X25519(b, 9):
    //     de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f
    // Their shared secret, K:
    //     4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742

    Move "77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a" To sAlicePrivKey
    Move "de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f" To sBobPubKey

    Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey
    If (Not(IsComObjectCreated(hoPrivKey))) Begin
        Send CreateComObject of hoPrivKey
    End
    // This example shows only one way of loading an Ed25519 private key.
    // Chilkat can load other formats (JWK, PEM, ASN.1 DER, etc.)  
    // You may do so by calling LoadAnyFormat or LoadAnyFormatFile.
    Get ComLoadEd25519 Of hoPrivKey sAlicePrivKey "" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoPrivKey To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get Create (RefClass(cComChilkatPublicKey)) To hoPubKey
    If (Not(IsComObjectCreated(hoPubKey))) Begin
        Send CreateComObject of hoPubKey
    End
    Get ComLoadEd25519 Of hoPubKey sBobPubKey To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoPubKey To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Create the shared secret:
    Get Create (RefClass(cComChilkatEdDSA)) To hoEddsa
    If (Not(IsComObjectCreated(hoEddsa))) Begin
        Send CreateComObject of hoEddsa
    End
    Get pvComObject of hoPrivKey to vPrivKey
    Get pvComObject of hoPubKey to vPubKey
    Get ComSharedSecretENC Of hoEddsa vPrivKey vPubKey "hexlower" To sSharedSecret
    Get ComLastMethodSuccess Of hoEddsa To bTemp1
    If (bTemp1 = False) Begin
        Get ComLastErrorText Of hoEddsa To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln "Computed: " sSharedSecret
    Showln "Expected: 4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742"


End_Procedure