Possibly FFII is also infringing on the patent by publishing this code:
//========================================================================
// Compute H1 and H2 such that P = 2*H1 = 2*H2 (if such halves exist)
// Return TRUE iff the halves exist.
//========================================================================
function TGF2NECurve.Halves(H1, H2, P: TGF2NEPoint): Boolean;
begin
//--- Check
if fStatus <> csHasCoefs then ErrorNoCoefs('Halves');
//--- P = Identity ?
if P.IsO then
begin
GetOrder2Point(H1);
H2.SetO;
Result := true;
Exit;
end;
with fField do
begin
//--- Compute T = X + Y/X (X and Y are unknow)
// Solve f(T) = T² + T + A + Px
GF2Set(H2.fY,fA);
Add(H2.fY,P.fX);
Result := SolveQuad(H1.fX,H2.fY); //H1.fX is used for "T"
if not Result then
begin
H1.SetO;
H2.SetO;
Exit;
end;
//--- The 2 roots T and T+1 lead to the 2 halves H1 and H2
GF2Set(H2.fY,H1.fX);
GF2Set(H1.fY,H1.fX);
Add1(H1.fY); //!And not GF2Add1 because of possible Normal Basis
GF2Set(H2.fX,H1.fY);
//--- Compute H1.X
// X := (T Px + Py)^(1/2)
Mul(H1.fX,P.fX);
Add(H1.fX,P.fY);
SqrRoot(H1.fX);
//--- Compute H1.Y
// Y := X (X + T + 1)
Add(H1.fY,H1.fX);
Mul(H1.fY,H1.fX);
//--- Compute H2.X
// X := ((T + 1) Px + Py)^(1/2)
Mul(H2.fX,P.fX);
Add(H2.fX,P.fY);
SqrRoot(H2.fX);
//--- Compute H2.Y
// Y := X (X + T)
Add(H2.fY,H2.fX);
Mul(H2.fY,H2.fX);
end;
end;
Marcel Martin wrote to OCS, asking them to withdraw their ultimatum and explaining to them that his code uses a different method from the one described in the patent. OCS did not answer but merely asked Martin for his address and the names of his customers . When Marcel had taken HIT off the Net, they said "That's not what we had wanted, we could have found an agreement", but did not explain what the terms of this agreement could have been. Marcel felt that whatever these terms might be, they would not give him longterm security needed for continuing to invest his efforts in the project. He therefore decided to abandon it.