736{
741 UINT32 cbScratchInternal = 0;
742
744
747
749
753
754 UINT32 highBitRestrictionPosition =
pCurve->HighBitRestrictionPosition;
755
756
758
760
761 if ( ( (
flags & ~allowedFlags ) != 0 ) ||
762 ( (
flags & algorithmFlags ) == 0 ) )
763 {
764 scError = SYMCRYPT_INVALID_ARGUMENT;
766 }
767
768
769
770
771
772
773
776 if ( pbScratch ==
NULL )
777 {
778 scError = SYMCRYPT_MEMORY_ALLOCATION_FAILURE;
780 }
781
782
783 pbScratchInternal = pbScratch;
785
788
789 pbScratchInternal +=
pCurve->cbModElement;
790 cbScratchInternal -=
pCurve->cbModElement;
791
794
795 pbScratchInternal += cbScalar;
796 cbScratchInternal -= cbScalar;
797
798
799
800
802 {
803 highBitRestrictionPosition -=
pCurve->coFactorPower;
804 }
805
806
807 do
808 {
809
810
811
812
815 peScalar,
817 pbScratchInternal,
818 cbScratchInternal );
819
820
822 {
824 {
825 SymCryptModAdd(
pCurve->GOrd, peScalar, peScalar, peScalar, pbScratchInternal, cbScratchInternal );
826 }
827 }
828
829
831
832 if (
pCurve->HighBitRestrictionNumOfBits > 0)
833 {
834
836 piScalar,
837 pCurve->HighBitRestrictionValue,
838 highBitRestrictionPosition,
839 pCurve->HighBitRestrictionNumOfBits );
840
841
843 piScalar,
845 {
846 break;
847 }
848 }
849 else
850 {
851
852 break;
853 }
854
855 cntr--;
856 }
857 while (cntr>0);
858
859 if (cntr <= 0)
860 {
861 scError = SYMCRYPT_INVALID_ARGUMENT;
863 }
864
865
866
868
869
871 {
873 }
874
875
877
878
881 pEckey->piPrivateKey,
884 pEckey->poPublicKey,
885 pbScratch,
887 if ( scError != SYMCRYPT_NO_ERROR )
888 {
890 }
891
892
894 {
895
896
898 pEckey,
900 pbScratch,
902 if ( scError != SYMCRYPT_NO_ERROR )
903 {
905 }
906 }
907
908 pEckey->hasPrivateKey =
TRUE;
909
910 pEckey->fAlgorithmInfo =
flags;
911
913 {
915 {
916
920 }
921
923 {
924
928
929
930
931
932
933
934
935 pbScratchInternal = pbScratch;
937
940 pbScratchInternal += cbTmp;
941 cbScratchInternal -= cbTmp;
942
944
945
948 pEckey->piPrivateKey,
951 poTmp,
952 pbScratchInternal,
953 cbScratchInternal );
954 if ( scError != SYMCRYPT_NO_ERROR )
955 {
957 }
958
960 }
961 }
962
964
965 if ( pbScratch !=
NULL )
966 {
969 }
970
971 return scError;
972}
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeyPerformPublicKeyValidation(_In_ PCSYMCRYPT_ECKEY pEckey, _In_ UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_ECPOINT_SET_RANDOM_MAX_TRIES
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define SYMCRYPT_RUN_SELFTEST_ONCE(AlgorithmSelftestFunction, AlgorithmSelftestFlag)
VOID SYMCRYPT_CALL SymCryptEcDsaSelftest(void)
VOID SYMCRYPT_CALL SymCryptEcDhSecretAgreementSelftest(void)
@ SYMCRYPT_SELFTEST_ALGORITHM_ECDH
@ SYMCRYPT_SELFTEST_ALGORITHM_ECDSA
#define SYMCRYPT_FIPS_ASSERT(x)
UINT32 SYMCRYPT_CALL SymCryptIntIsLessThan(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2)
VOID SYMCRYPT_CALL SymCryptIntToModElement(_In_ PCSYMCRYPT_INT piSrc, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptIntSetBits(_In_ PSYMCRYPT_INT piDst, UINT32 value, UINT32 iBit, UINT32 nBits)
VOID SYMCRYPT_CALL SymCryptModSetRandom(_In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_FLAG_MODRANDOM_ALLOW_ONE
VOID SYMCRYPT_CALL SymCryptModAdd(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptModElementToInt(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_INT piDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
UINT32 SYMCRYPT_CALL SymCryptEcpointIsEqual(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, UINT32 flags, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_FLAG_MODRANDOM_ALLOW_MINUSONE
#define SYMCRYPT_FLAG_ECC_LL_COFACTOR_MUL
VOID SYMCRYPT_CALL SymCryptModDivPow2(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, UINT32 exp, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)