8287178: IntegerModuloP::multiplicativeInverse returns 0 for 0
Reviewed-by: jnimeh
This commit is contained in:
parent
da2339cf69
commit
d4b473d890
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -156,6 +156,13 @@ public interface IntegerModuloP {
|
|||||||
* @return the multiplicative inverse (1 / this)
|
* @return the multiplicative inverse (1 / this)
|
||||||
*/
|
*/
|
||||||
default ImmutableIntegerModuloP multiplicativeInverse() {
|
default ImmutableIntegerModuloP multiplicativeInverse() {
|
||||||
|
// This method is used in 2 cases:
|
||||||
|
// 1. To calculate the inverse of a number in ECDSAOperations,
|
||||||
|
// this number must be non zero (modulo p).
|
||||||
|
// 2. To flatten a 3D point to a 2D AffinePoint. This number
|
||||||
|
// might be zero (infinity). However, since the infinity
|
||||||
|
// is represented as (0, 0) in 2D, it’s OK returning 0 as
|
||||||
|
// the inverse of 0, i.e. (1, 1, 0) == (1/0, 1/0) == (0, 0).
|
||||||
return pow(getField().getSize().subtract(BigInteger.valueOf(2)));
|
return pow(getField().getSize().subtract(BigInteger.valueOf(2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user