@@ -648,6 +648,170 @@ private static void curve25519_test()
648648        if  ( publicKeyB  !=  IntPtr . Zero )  wolfcrypt . Curve25519FreeKey ( publicKeyB ) ; 
649649    }  /* END curve25519_test */ 
650650
651+     private  static void  mlkem_test ( wolfcrypt . MlKemTypes  type ) 
652+     { 
653+         int  ret ; 
654+         IntPtr  keyA  =  IntPtr . Zero ; 
655+         IntPtr  keyB  =  IntPtr . Zero ; 
656+         IntPtr  heap  =  IntPtr . Zero ; 
657+         int  devId  =  wolfcrypt . INVALID_DEVID ; 
658+         byte [ ]  pubA ,  privA ,  cipherText ,  sharedSecretA ,  sharedSecretB ; 
659+ 
660+         Console . WriteLine ( "\n Starting "  +  type  +  " shared secret test ..." ) ; 
661+ 
662+         /* Generate Key Pair */ 
663+         Console . WriteLine ( "Testing ML-KEM Key Generation..." ) ; 
664+ 
665+         Console . WriteLine ( "Generate Key Pair A..." ) ; 
666+         keyA  =  wolfcrypt . MlKemMakeKey ( type ,  heap ,  devId ) ; 
667+         if  ( keyA  ==  IntPtr . Zero ) 
668+         { 
669+             throw  new  Exception ( "Failed to generate key pair A." ) ; 
670+         } 
671+ 
672+         Console . WriteLine ( "Generate Key Pair B..." ) ; 
673+         keyB  =  wolfcrypt . MlKemMakeKey ( type ,  heap ,  devId ) ; 
674+         if  ( keyB  ==  IntPtr . Zero ) 
675+         { 
676+             throw  new  Exception ( "Failed to generate key pair B." ) ; 
677+         } 
678+ 
679+         Console . WriteLine ( "ML-KEM Key Generation test passed." ) ; 
680+ 
681+         /* Encode */ 
682+         Console . WriteLine ( "Testing ML-KEM Key Encode..." ) ; 
683+         ret  =  wolfcrypt . MlKemEncodePublicKey ( keyA ,  out  pubA ) ; 
684+         if  ( ret  !=  0 ) 
685+         { 
686+             throw  new  Exception ( "Failed to encode public key of A." ) ; 
687+         } 
688+         ret  =  wolfcrypt . MlKemEncodePrivateKey ( keyA ,  out  privA ) ; 
689+         if  ( ret  !=  0 ) 
690+         { 
691+             throw  new  Exception ( "Failed to encode private key of A." ) ; 
692+         } 
693+         Console . WriteLine ( "ML-KEM Key Encode test passed." ) ; 
694+ 
695+         /* Encapsulate */ 
696+         Console . WriteLine ( "Testing ML-KEM Encapsulation..." ) ; 
697+         ret  =  wolfcrypt . MlKemEncapsulate ( keyA ,  out  cipherText ,  out  sharedSecretA ) ; 
698+         if  ( ret  !=  0 ) 
699+         { 
700+             throw  new  Exception ( "Failed to encapsulate." ) ; 
701+         } 
702+         Console . WriteLine ( "ML-KEM Encapsulation test passed." ) ; 
703+ 
704+         /* Decode */ 
705+         Console . WriteLine ( "Testing ML-KEM Decode..." ) ; 
706+         ret  =  wolfcrypt . MlKemDecodePrivateKey ( keyB ,  privA ) ; 
707+         if  ( ret  !=  0 ) 
708+         { 
709+             throw  new  Exception ( "Failed to decode private key of A." ) ; 
710+         } 
711+         ret  =  wolfcrypt . MlKemDecodePublicKey ( keyB ,  pubA ) ; 
712+         if  ( ret  !=  0 ) 
713+         { 
714+             throw  new  Exception ( "Failed to decode public key of B." ) ; 
715+         } 
716+         Console . WriteLine ( "ML-KEM Decode test passed." ) ; 
717+ 
718+         /* Decapsulate */ 
719+         Console . WriteLine ( "Testing ML-KEM Decapsulation..." ) ; 
720+         ret  =  wolfcrypt . MlKemDecapsulate ( keyB ,  cipherText ,  out  sharedSecretB ) ; 
721+         if  ( ret  !=  0 ) 
722+         { 
723+             throw  new  Exception ( "Failed to decapsulate." ) ; 
724+         } 
725+         Console . WriteLine ( "ML-KEM Decapsulation test passed." ) ; 
726+ 
727+         /* Check */ 
728+         Console . WriteLine ( "Comparing Shared Secrets..." ) ; 
729+         if  ( ! wolfcrypt . ByteArrayVerify ( sharedSecretA ,  sharedSecretB ) ) 
730+         { 
731+             throw  new  Exception ( "Shared secrets do not match." ) ; 
732+         } 
733+         else 
734+         { 
735+             Console . WriteLine ( "ML-KEM shared secret match." ) ; 
736+         } 
737+ 
738+         /* Cleanup */ 
739+         if  ( keyA  !=  IntPtr . Zero )  wolfcrypt . MlKemFreeKey ( keyA ) ; 
740+         if  ( keyB  !=  IntPtr . Zero )  wolfcrypt . MlKemFreeKey ( keyB ) ; 
741+     }  /* END mlkem_test */ 
742+ 
743+     private  static void  mldsa_test ( wolfcrypt . MlDsaTypes  type ) 
744+     { 
745+         int  ret ; 
746+         IntPtr  key  =  IntPtr . Zero ; 
747+         IntPtr  heap  =  IntPtr . Zero ; 
748+         int  devId  =  wolfcrypt . INVALID_DEVID ; 
749+         byte [ ]  privateKey ; 
750+         byte [ ]  publicKey ; 
751+         byte [ ]  message  =  Encoding . UTF8 . GetBytes ( "This is some data to sign with ML-DSA" ) ; 
752+         byte [ ]  signature ; 
753+ 
754+         Console . WriteLine ( "\n Starting "  +  type  +  " shared secret test ..." ) ; 
755+ 
756+         /* Generate Key Pair */ 
757+         Console . WriteLine ( "Testing ML-DSA Key Generation..." ) ; 
758+         key  =  wolfcrypt . DilithiumMakeKey ( heap ,  devId ,  type ) ; 
759+         if  ( key  ==  IntPtr . Zero ) 
760+         { 
761+             throw  new  Exception ( "DilithiumMakeKey failed" ) ; 
762+         } 
763+         Console . WriteLine ( "ML-DSA Key Generation test passed." ) ; 
764+ 
765+         /* Export */ 
766+         Console . WriteLine ( "Testing ML-DSA Key Export..." ) ; 
767+         ret  =  DilithiumExportPrivateKey ( key ,  out  privateKey ) ; 
768+         if  ( ret  !=  0 ) 
769+         { 
770+             throw  new  Exception ( "DilithiumExportPrivateKey failed" ) ; 
771+         } 
772+         ret  =  DilithiumExportPublicKey ( key ,  out  publicKey ) ; 
773+         if  ( ret  !=  0 ) 
774+         { 
775+             throw  new  Exception ( "DilithiumExportPublicKey failed" ) ; 
776+         } 
777+         Console . WriteLine ( "ML-DSA Key Export test passed." ) ; 
778+ 
779+         /* Import */ 
780+         Console . WriteLine ( "Testing ML-DSA Key Import..." ) ; 
781+         ret  =  DilithiumImportPrivateKey ( privateKey ,  key ) ; 
782+         if  ( ret  !=  0 ) 
783+         { 
784+             throw  new  Exception ( "DilithiumImportPrivateKey failed" ) ; 
785+         } 
786+         ret  =  DilithiumImportPublicKey ( publicKey ,  key ) ; 
787+         if  ( ret  !=  0 ) 
788+         { 
789+             throw  new  Exception ( "DilithiumImportPrivateKey failed" ) ; 
790+         } 
791+         Console . WriteLine ( "ML-DSA Key Import test passed." ) ; 
792+ 
793+         /* Sign */ 
794+         Console . WriteLine ( "Testing ML-DSA Signature Creation..." ) ; 
795+         ret  =  wolfcrypt . DilithiumSignMsg ( key ,  message ,  out  signature ) ; 
796+         if  ( ret  !=  0 ) 
797+         { 
798+             throw  new  Exception ( "DilithiumSign failed" ) ; 
799+         } 
800+         Console . WriteLine ( $ "ML-DSA Signature Creation test passed. Signature Length: { signature . Length } ") ; 
801+ 
802+         /* Verify */ 
803+         Console . WriteLine ( "Testing ML-DSA Signature Verification..." ) ; 
804+         ret  =  wolfcrypt . DilithiumVerifyMsg ( key ,  message ,  signature ) ; 
805+         if  ( ret  !=  0 ) 
806+         { 
807+             throw  new  Exception ( "DilithiumVerify failed" ) ; 
808+         } 
809+         Console . WriteLine ( "ML-DSA Signature Verification test passed." ) ; 
810+ 
811+         if  ( key  !=  IntPtr . Zero )  wolfcrypt . DilithiumFreeKey ( key ) ; 
812+ 
813+     }  /* END mldsa_test */ 
814+ 
651815    private  static void  aes_gcm_test ( ) 
652816    { 
653817        IntPtr  aes  =  IntPtr . Zero ; 
@@ -904,6 +1068,18 @@ public static void Main(string[] args)
9041068
9051069            curve25519_test ( ) ;  /* curve25519 shared secret test */ 
9061070
1071+             Console . WriteLine ( "\n Starting ML-KEM test" ) ; 
1072+ 
1073+             mlkem_test ( wolfcrypt . MlKemTypes . ML_KEM_512 ) ;  /* ML-KEM test */ 
1074+             mlkem_test ( wolfcrypt . MlKemTypes . ML_KEM_768 ) ;  /* ML-KEM test */ 
1075+             mlkem_test ( wolfcrypt . MlKemTypes . ML_KEM_1024 ) ;  /* ML-KEM test */ 
1076+ 
1077+             Console . WriteLine ( "\n Starting ML-DSA test" ) ; 
1078+ 
1079+             mldsa_test ( wolfcrypt . MlDsaTypes . ML_DSA_44 ) ;  /* ML-DSA test */ 
1080+             mldsa_test ( wolfcrypt . MlDsaTypes . ML_DSA_65 ) ;  /* ML-DSA test */ 
1081+             mldsa_test ( wolfcrypt . MlDsaTypes . ML_DSA_87 ) ;  /* ML-DSA test */ 
1082+ 
9071083            Console . WriteLine ( "\n Starting AES-GCM test" ) ; 
9081084
9091085            aes_gcm_test ( ) ;  /* AES_GCM test */ 
0 commit comments