Commit bd40826d authored by jan.koester's avatar jan.koester
Browse files

test

parent b319f69e
Loading
Loading
Loading
Loading
+20 −52
Original line number Diff line number Diff line
@@ -130,32 +130,24 @@ void FieldElement::from_bytes(std::vector<uint8_t> in){
}

std::vector<uint8_t> FieldElement::to_bytes() const {
    FieldElement t = *this;
    FieldElement m;

    // 3 carries wie in ref10
    t.carry25519();
    t.carry25519();
    t.carry25519();

    for (int j = 0; j < 2; ++j) {
       std::vector <uint8_t> out(32,0);
        int carry;
        FieldElement m,t=*this;
        t.carry25519(); t.carry25519(); t.carry25519();
        for(size_t j=0; j<2; ++j){
            m.limbs[0]=t.limbs[0]-0xFFED;
        for (int i = 1; i < 15; ++i) {
            for(size_t i=1; i< 15; i++){
                m.limbs[i]=t.limbs[i]-0xFFFF-((m.limbs[i-1]>>16) & 1);
                m.limbs[i-1]&=0xFFFF;
            }
            m.limbs[15]=t.limbs[15]-0x7FFF-((m.limbs[14]>>16) &1);
        int carry = (m.limbs[15] >> 16) & 1;
            carry=(m.limbs[15]>>16) & 1;
            m.limbs[14] &=0xFFFF;

        // constant-time select:
        t.sel25519(m, 1 - carry);
            t.cswap(m,1-carry);
        }

    std::vector<uint8_t> out(32);
    for (int i = 0; i < 16; ++i) {
        out[2*i]     = (uint8_t)(t.limbs[i] & 0xFF);
        out[2*i + 1] = (uint8_t)((t.limbs[i] >> 8) & 0xFF);
        for(size_t i = 0; i <16; ++i){
            out[2*i] = t.limbs[i] & 0xFF;
            out[2*i+1] = t.limbs[i] >> 8;
        }
        return out;
}
@@ -189,30 +181,6 @@ bool scalarmult_curve25519(std::vector<uint8_t> &out,
                           const std::vector<uint8_t> &scalar,
                           const std::vector<uint8_t> &point_u) {

    auto pack = [&](std::vector<uint8_t> &out,const FieldElement &in){
        out.resize(32);
        int carry;
        FieldElement m,t;
        for(size_t i=0; i <16; ++i){
            t.limbs[i]=in.limbs[i];
        }
        t.carry25519(); t.carry25519(); t.carry25519();
        for(size_t j=0; j<2; ++j){
            m.limbs[0]=t.limbs[0]-0xFFED;
            for(size_t i=1; i< 15; i++){
                m.limbs[i]=t.limbs[i]-0xFFFF-((m.limbs[i-1]>>16) & 1);
                m.limbs[i-1]&=0xFFFF;
            }
            m.limbs[15]=t.limbs[15]-0x7FFF-((m.limbs[14]>>16) &1);
            carry=(m.limbs[15]>>16) & 1;
            m.limbs[14] &=0xFFFF;
            t.cswap(m,1-carry);
        }
        for(size_t i = 0; i <16; ++i){
            out[2*i] = t.limbs[i] & 0xFF;
            out[2*i+1] = t.limbs[i] >> 8;
        }
    };
    std::array<uint8_t,32> clamped;
    FieldElement _12665;
    _12665.limbs={0xDB41,1};
@@ -263,7 +231,7 @@ bool scalarmult_curve25519(std::vector<uint8_t> &out,

    c=c.invert();
    a=a*c;
    pack(out,a);
    out=a.to_bytes();
    return true;
}