The X.509 defines the AlgorithmIdentifier as
AlgorithmIdentifier{ALGORITHM:SupportedAlgorithms} ::= SEQUENCE {
algorithm ALGORITHM.&id({SupportedAlgorithms}),
parameters ALGORITHM.&Type({SupportedAlgorithms}{@algorithm}) OPTIONAL,
... }
where
ALGORITHM ::= CLASS {
&Type OPTIONAL,
&id OBJECT IDENTIFIER UNIQUE }
WITH SYNTAX {
[PARMS &Type]
IDENTIFIED BY &id }
As to RFC 5480 the parameter for ECDSA is an object identifier for the curve
to be used.
To get a more formal specification I tried to define:
CURVE ::= CLASS {
&id OBJECT IDENTIFIER UNIQUE }
WITH SYNTAX {
IDENTIFIED BY &id }
SupportedCurves CURVE ::= {...} -- to be filled by referencing specification
The ECDSA public key algorithm may then be written as:
ecPublicKey ALGORITHM ::= { -- IETF RFC 5480
PARMS CURVE.&id ({SupportedCurves})
IDENTIFIED BY id-ecPublicKey }
It is then possible in a referencing specification to formally specify in
the ASN.1 what curve(s) may be used and thereby make optimal use of tools..
Most likely, the ASN.1 guys (Jean-Paul and Paul) can find a more elegant way
of doing the same thing or at least check whether the proposed ASN.1 is
correct (it compiles).
Your comments will be highly appreciated.
Erik