mirror of
https://github.com/kazu-yamamoto/crypton.git
synced 2024-10-05 00:07:53 +03:00
commit
88e614b675
@ -100,8 +100,20 @@ instance EllipticCurve Curve_P256R1 where
|
||||
curveGenerateScalar _ = P256.scalarGenerate
|
||||
curveGenerateKeyPair _ = toKeyPair <$> P256.scalarGenerate
|
||||
where toKeyPair scalar = KeyPair (P256.toPoint scalar) scalar
|
||||
encodePoint _ p = P256.pointToBinary p
|
||||
decodePoint _ bs = P256.pointFromBinary bs
|
||||
encodePoint _ p = mxy
|
||||
where
|
||||
mxy :: forall bs. ByteArray bs => bs
|
||||
mxy = B.concat [uncompressed, xy]
|
||||
where
|
||||
uncompressed, xy :: bs
|
||||
uncompressed = B.singleton 4
|
||||
xy = P256.pointToBinary p
|
||||
decodePoint _ mxy = case B.uncons mxy of
|
||||
Nothing -> CryptoFailed $ CryptoError_PointSizeInvalid
|
||||
Just (m,xy)
|
||||
-- uncompressed
|
||||
| m == 4 -> P256.pointFromBinary xy
|
||||
| otherwise -> CryptoFailed $ CryptoError_PointFormatInvalid
|
||||
|
||||
instance EllipticCurveArith Curve_P256R1 where
|
||||
pointAdd _ a b = P256.pointAdd a b
|
||||
|
@ -49,7 +49,7 @@ import Crypto.Internal.Compat
|
||||
import Crypto.Internal.Imports
|
||||
import Crypto.Internal.ByteArray
|
||||
import qualified Crypto.Internal.ByteArray as B
|
||||
import Data.Memory.PtrMethods (memSet, memCopy)
|
||||
import Data.Memory.PtrMethods (memSet)
|
||||
import Crypto.Error
|
||||
import Crypto.Random
|
||||
import Crypto.Number.Serialize.Internal (os2ip, i2ospOf)
|
||||
@ -119,7 +119,7 @@ pointDh scalar p =
|
||||
B.unsafeCreate scalarSize $ \dst -> withTempPoint $ \dx dy -> do
|
||||
withScalar scalar $ \n -> withPoint p $ \px py -> withScalarZero $ \nzero ->
|
||||
ccryptonite_p256_points_mul_vartime nzero n px py dx dy
|
||||
memCopy dst (castPtr dx) scalarSize
|
||||
ccryptonite_p256_to_bin (castPtr dx) dst
|
||||
|
||||
-- | multiply the point @p with @n2 and add a lifted to curve value @n1
|
||||
--
|
||||
|
Loading…
Reference in New Issue
Block a user