Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F18826449
HACKING
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
3 KB
Subscribers
None
HACKING
View Options
Various hacking notes -*- text -*-
=======================
Taking optimized MPI code out of GMP:
-------------------------------------
I generated the pentium4/* files by glueing the existing assembler
prologues to the GMP 4.2.1 assembler files generated with the m4
tool in GMP's build process, for example:
$ m4 -DHAVE_CONFIG_H -D__GMP_WITHIN_GMP -DOPERATION_rshift -DPIC \
rshift.asm >tmp-rshift.s
Then tmp-rshift will contain the assembler instructions for the
configured platform. Unfortunately, this way the comments are lost.
For most files I re-inserted some of the comments, but this is
tedious work.
Debugging math stuff:
---------------------
While debugging the ECC code in libgcrypt, I was in need for some
computer algebra system which would allow me to verify the numbers
in the debugging easily. I found that PARI (pari-gp package in
Debian) has support for elliptic curves. The below commands shows
how they are set up and used with an example.
===8<========
hextodec(s)=local(v=Vec(s),a=10,b=11,c=12,d=13,e=14,f=15,A=10,B=11,C=12,D=13,E=14,F=15,h);if(#setunion(Set(v),Vec("0123456789ABCDEFabcdef"))>22,error);for(i=1,#v,h=shift(h,4)+eval(v[i]));h
p = hextodec("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")
a = hextodec("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC")
b = hextodec("51953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00")
/* Set up y^2 = x^3 + ax + b mod (p). */
e = ellinit(Mod(1,p)*[0,0,0,a,b]);
gx = hextodec ("00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66")
gy = hextodec ("011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650")
g = Mod(1,p)*[gx,gy]
n = hextodec ("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409")
/* Verify that G is on the curve, and that n is the order. */
ellisoncurve (e,g)
isprime (n)
ellpow (e,g,n)
d = hextodec ("018F9573F25059571BDF614529953DE2540497CEDABD04F3AF78813BED7BB163A2FD919EECF822848FCA39EF55E500F8CE861C7D53D371857F7774B79428E887F81B")
qx = hextodec ("00316AAAD3E905875938F588BD9E8A4785EF9BDB76D62A83A5340F82CB8E800B25619F5C3EA02B7A4FA43D7497C7702F7DFBEAC8E8F92C3CAABD9F84182FDA391B3B")
/* Note: WRONG! (It is apparent that this is the same as X shifted by
8 bit). */
qy = hextodec ("0000316AAAD3E905875938F588BD9E8A4785EF9BDB76D62A83A5340F82CB8E800B25619F5C3EA02B7A4FA43D7497C7702F7DFBEAC8E8F92C3CAABD9F84182FDA391B")
q = Mod(1,p)*[qx,qy]
/* Calculate what Q should be given d. */
ellpow (e,g,d)
/* This is not 0 and thus shows that libgcrypt gave Q and d that do
not match. */
ellpow (e,g,d) - q
====8<=====================
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Dec 23, 5:15 PM (6 h, 7 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
e8/1e/a738a5f3548e84c29d5e2528b0ae
Attached To
rC libgcrypt
Event Timeline
Log In to Comment