    FOREIGN MODULE sun_security_util;

    IMPORT
        java_lang,
        java_math,
        java_util,
        java_io,
        java_security,
        sun_misc,
        java_util_jar,
        java_security_cert,
        sun_security_pkcs;

    TYPE

      BigInt* = POINTER TO RECORD (java_lang.Object)
                STATIC
                  PROCEDURE Init*(p0 : INTEGER) : BigInt,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : java_math.BigInteger) : BigInt,CONSTRUCTOR;
                  PROCEDURE Init*(IN  p0 : ARRAY OF BYTE) : BigInt,CONSTRUCTOR;
                END;

      BitArray* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                  STATIC
                    PROCEDURE Init*(p0 : INTEGER) : BitArray,CONSTRUCTOR;
                    PROCEDURE Init*(    p0 : INTEGER;
                                    IN  p1 : ARRAY OF BYTE) : BitArray,CONSTRUCTOR;
                    PROCEDURE Init*(IN  p0 : ARRAY OF BOOLEAN) : BitArray,CONSTRUCTOR;
                  END;

      ByteArrayLexOrder* = POINTER TO EXTENSIBLE RECORD (java_lang.Object + java_util.Comparator)
                           STATIC
                             PROCEDURE Init*() : ByteArrayLexOrder,CONSTRUCTOR;
                           END;

      ByteArrayTagOrder* = POINTER TO EXTENSIBLE RECORD (java_lang.Object + java_util.Comparator)
                           STATIC
                             PROCEDURE Init*() : ByteArrayTagOrder,CONSTRUCTOR;
                           END;

      Debug* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
               STATIC
                 PROCEDURE Init*() : Debug,CONSTRUCTOR;
                 PROCEDURE Help*();
                 PROCEDURE getInstance*(p0 : java_lang.String) : Debug;
                 PROCEDURE getInstance*(p0 : java_lang.String;
                                        p1 : java_lang.String) : Debug;
                 PROCEDURE isOn*(p0 : java_lang.String) : BOOLEAN;
                 PROCEDURE println*(p0 : java_lang.String;
                                    p1 : java_lang.String);
               END;

      DerEncoder* = POINTER TO INTERFACE RECORD (java_lang.Object)
                    END;

      DerInputStream* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                        STATIC
                          PROCEDURE Init*(IN  p0 : ARRAY OF BYTE) : DerInputStream,CONSTRUCTOR;
                          PROCEDURE Init*(IN  p0 : ARRAY OF BYTE;
                                              p1 : INTEGER;
                                              p2 : INTEGER) : DerInputStream,CONSTRUCTOR;
                        END;

      DerOutputStream* = POINTER TO EXTENSIBLE RECORD (java_io.ByteArrayOutputStream + DerEncoder)
                         STATIC
                           PROCEDURE Init*() : DerOutputStream,CONSTRUCTOR;
                           PROCEDURE Init*(p0 : INTEGER) : DerOutputStream,CONSTRUCTOR;
                         END;

      DerValue* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                    tag* : BYTE;
                    buffer! : DerInputBuffer;
                    data* : DerInputStream;
                  STATIC
                    TAG_UNIVERSAL* = 0;
                    TAG_APPLICATION* = 64;
                    TAG_CONTEXT* = -128;
                    TAG_PRIVATE* = -64;
                    tag_Boolean* = 1;
                    tag_Integer* = 2;
                    tag_BitString* = 3;
                    tag_OctetString* = 4;
                    tag_Null* = 5;
                    tag_ObjectId* = 6;
                    tag_Enumerated* = 10;
                    tag_PrintableString* = 19;
                    tag_T61String* = 20;
                    tag_IA5String* = 22;
                    tag_UtcTime* = 23;
                    tag_GeneralizedTime* = 24;
                    tag_BMPString* = 30;
                    tag_UniversalString* = 28;
                    tag_Sequence* = 48;
                    tag_SequenceOf* = 48;
                    tag_Set* = 49;
                    tag_SetOf* = 49;
                    PROCEDURE Init*(    p0 : BYTE;
                                    IN  p1 : ARRAY OF BYTE) : DerValue,CONSTRUCTOR;
                    PROCEDURE Init*(p0 : java_io.InputStream) : DerValue,CONSTRUCTOR;
                    PROCEDURE Init*(p0 : java_lang.String) : DerValue,CONSTRUCTOR;
                    PROCEDURE Init*(IN  p0 : ARRAY OF BYTE) : DerValue,CONSTRUCTOR;
                    PROCEDURE Init*(IN  p0 : ARRAY OF BYTE;
                                        p1 : INTEGER;
                                        p2 : INTEGER) : DerValue,CONSTRUCTOR;
                    PROCEDURE createTag*(p0 : BYTE;
                                         p1 : BOOLEAN;
                                         p2 : BYTE) : BYTE;
                  END;

      ManifestDigester$Entry* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                                STATIC
                                  PROCEDURE Init*(    p0 : INTEGER;
                                                      p1 : INTEGER;
                                                      p2 : INTEGER;
                                                  IN  p3 : ARRAY OF BYTE) : ManifestDigester$Entry,CONSTRUCTOR;
                                END;

      ManifestDigester* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                          STATIC
                            PROCEDURE Init*(IN  p0 : ARRAY OF BYTE) : ManifestDigester,CONSTRUCTOR;
                          END;

      ManifestEntryVerifier* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                               STATIC
                                 PROCEDURE Init*(p0 : java_util_jar.Manifest) : ManifestEntryVerifier,CONSTRUCTOR;
                               END;

      ObjectIdentifier* = POINTER TO RECORD (java_lang.Object + java_io.Serializable)
                          STATIC
                            PROCEDURE Init*(p0 : java_lang.String) : ObjectIdentifier,CONSTRUCTOR;
                            PROCEDURE Init*(p0 : DerInputStream) : ObjectIdentifier,CONSTRUCTOR;
                            PROCEDURE Init*(IN  p0 : ARRAY OF INTEGER) : ObjectIdentifier,CONSTRUCTOR;
                          END;

      PropertyExpander$ExpandException* = POINTER TO EXTENSIBLE RECORD (java_security.GeneralSecurityException)
                                          STATIC
                                            PROCEDURE Init*(p0 : java_lang.String) : PropertyExpander$ExpandException,CONSTRUCTOR;
                                          END;

      PropertyExpander* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                          STATIC
                            PROCEDURE Init*() : PropertyExpander,CONSTRUCTOR;
                            PROCEDURE expand*(p0 : java_lang.String) : java_lang.String;
                            PROCEDURE main*(IN  p0 : ARRAY OF java_lang.String);
                          END;

      SignatureFile$Block* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                             END;

      SignatureFile* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                       STATIC
                         PROCEDURE Init*(IN  p0 : ARRAY OF java_security.MessageDigest;
                                             p1 : java_util_jar.Manifest;
                                             p2 : ManifestDigester;
                                             p3 : java_lang.String;
                                             p4 : BOOLEAN) : SignatureFile,CONSTRUCTOR;
                       END;

      SignatureFileVerifier* = POINTER TO EXTENSIBLE RECORD (java_lang.Object)
                               STATIC
                                 PROCEDURE Init*(    p0 : java_util.ArrayList;
                                                     p1 : ManifestDigester;
                                                     p2 : java_lang.String;
                                                 IN  p3 : ARRAY OF BYTE) : SignatureFileVerifier,CONSTRUCTOR;
                               END;

    PROCEDURE (self:BigInt) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

    PROCEDURE (self:BigInt) equals*(p0 : BigInt) : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:BigInt) toBigInteger*() : java_math.BigInteger,NEW,EXTENSIBLE;

    PROCEDURE (self:BigInt) toByteArray*() : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:BigInt) toInt*() : INTEGER,NEW,EXTENSIBLE;

    PROCEDURE (self:BigInt) toString*() : java_lang.String,EXTENSIBLE;

    PROCEDURE (self:BitArray) clone*() : java_lang.Object,EXTENSIBLE;

    PROCEDURE (self:BitArray) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

    PROCEDURE (self:BitArray) get*(p0 : INTEGER) : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:BitArray) hashCode*() : INTEGER,EXTENSIBLE;

    PROCEDURE (self:BitArray) length*() : INTEGER,NEW,EXTENSIBLE;

    PROCEDURE (self:BitArray) set*(p0 : INTEGER;
                                   p1 : BOOLEAN),NEW,EXTENSIBLE;

    PROCEDURE (self:BitArray) toBooleanArray*() : POINTER TO ARRAY OF BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:BitArray) toByteArray*() : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:BitArray) toString*() : java_lang.String,EXTENSIBLE;

    PROCEDURE (self:ByteArrayLexOrder) compare*(p0 : java_lang.Object;
                                                p1 : java_lang.Object) : INTEGER,NEW;

    PROCEDURE (self:ByteArrayTagOrder) compare*(p0 : java_lang.Object;
                                                p1 : java_lang.Object) : INTEGER,NEW;

    PROCEDURE (self:Debug) println*(),NEW,EXTENSIBLE;

    PROCEDURE (self:Debug) println*(p0 : java_lang.String),NEW,EXTENSIBLE;

    PROCEDURE (self:DerEncoder) derEncode*(p0 : java_io.OutputStream),NEW,ABSTRACT;

    PROCEDURE (self:DerInputStream) available*() : INTEGER,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getBitString*() : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getBytes*(IN  p0 : ARRAY OF BYTE),NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getDerValue*() : DerValue,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getEnumerated*() : BigInt,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getGeneralizedTime*() : java_util.Date,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getInteger*() : BigInt,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getNull*(),NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getOID*() : ObjectIdentifier,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getOctetString*() : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getSequence*(p0 : INTEGER) : POINTER TO ARRAY OF DerValue,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getSet*(p0 : INTEGER) : POINTER TO ARRAY OF DerValue,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getSet*(p0 : INTEGER;
                                            p1 : BOOLEAN) : POINTER TO ARRAY OF DerValue,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getUTCTime*() : java_util.Date,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) getUnalignedBitString*() : BitArray,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) mark*(p0 : INTEGER),NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) peekByte*() : INTEGER,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) readVector!(p0 : INTEGER) : POINTER TO ARRAY OF DerValue,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) reset*(),NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) subStream*(p0 : INTEGER;
                                               p1 : BOOLEAN) : DerInputStream,NEW,EXTENSIBLE;

    PROCEDURE (self:DerInputStream) toByteArray*() : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) derEncode*(p0 : java_io.OutputStream),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putBitString*(IN  p0 : ARRAY OF BYTE),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putBoolean*(p0 : BOOLEAN),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putDerValue*(p0 : DerValue),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putEnumerated*(p0 : BigInt),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putGeneralizedTime*(p0 : java_util.Date),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putIA5String*(p0 : java_lang.String),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putInteger*(p0 : BigInt),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putLength*(p0 : INTEGER),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putNull*(),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putOID*(p0 : ObjectIdentifier),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putOctetString*(IN  p0 : ARRAY OF BYTE),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putOrderedSet*(    p0 : BYTE;
                                                    IN  p1 : ARRAY OF DerEncoder),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putOrderedSetOf*(    p0 : BYTE;
                                                      IN  p1 : ARRAY OF DerEncoder),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putPrintableString*(p0 : java_lang.String),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putSequence*(IN  p0 : ARRAY OF DerValue),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putSet*(IN  p0 : ARRAY OF DerValue),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putTag*(p0 : BYTE;
                                             p1 : BOOLEAN;
                                             p2 : BYTE),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putUTCTime*(p0 : java_util.Date),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) putUnalignedBitString*(p0 : BitArray),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) write*(p0 : BYTE;
                                            p1 : DerOutputStream),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) write*(    p0 : BYTE;
                                            IN  p1 : ARRAY OF BYTE),NEW,EXTENSIBLE;

    PROCEDURE (self:DerOutputStream) writeImplicit*(p0 : BYTE;
                                                    p1 : DerOutputStream),NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) encode*(p0 : DerOutputStream),NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

    PROCEDURE (self:DerValue) equals*(p0 : DerValue) : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getAsString*() : java_lang.String,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getBitString*() : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getBitString*(p0 : BOOLEAN) : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getBoolean*() : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getEnumerated*() : BigInt,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getIA5String*() : java_lang.String,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getInteger*() : BigInt,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getInteger*(p0 : BOOLEAN) : BigInt,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getOID*() : ObjectIdentifier,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getOctetString*() : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getPrintableString*() : java_lang.String,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getT61String*() : java_lang.String,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getUnalignedBitString*() : BitArray,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) getUnalignedBitString*(p0 : BOOLEAN) : BitArray,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) isConstructed*() : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) isContextSpecific*() : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) isContextSpecific*(p0 : BYTE) : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) length*() : INTEGER,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) resetTag*(p0 : BYTE),NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) toByteArray*() : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) toDerInputStream*() : DerInputStream,NEW,EXTENSIBLE;

    PROCEDURE (self:DerValue) toString*() : java_lang.String,EXTENSIBLE;

    PROCEDURE (self:ManifestDigester$Entry) digest*(p0 : java_security.MessageDigest) : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:ManifestDigester$Entry) digestWorkaround*(p0 : java_security.MessageDigest) : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:ManifestDigester) get*(p0 : java_lang.String;
                                           p1 : BOOLEAN) : ManifestDigester$Entry,NEW,EXTENSIBLE;

    PROCEDURE (self:ManifestDigester) manifestDigest*(p0 : java_security.MessageDigest) : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

    PROCEDURE (self:ManifestEntryVerifier) getEntry*() : java_util_jar.JarEntry,NEW,EXTENSIBLE;

    PROCEDURE (self:ManifestEntryVerifier) setEntry*(p0 : java_lang.String;
                                                     p1 : java_util_jar.JarEntry),NEW,EXTENSIBLE;

    PROCEDURE (self:ManifestEntryVerifier) update*(p0 : BYTE),NEW,EXTENSIBLE;

    PROCEDURE (self:ManifestEntryVerifier) update*(IN  p0 : ARRAY OF BYTE;
                                                       p1 : INTEGER;
                                                       p2 : INTEGER),NEW,EXTENSIBLE;

    PROCEDURE (self:ManifestEntryVerifier) verify*(p0 : java_util.Hashtable;
                                                   p1 : java_util.Hashtable) : POINTER TO ARRAY OF java_security_cert.Certificate,NEW,EXTENSIBLE;

    PROCEDURE (self:ObjectIdentifier) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

    PROCEDURE (self:ObjectIdentifier) equals*(p0 : ObjectIdentifier) : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:ObjectIdentifier) hashCode*() : INTEGER,EXTENSIBLE;

    PROCEDURE (self:ObjectIdentifier) precedes*(p0 : ObjectIdentifier) : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:ObjectIdentifier) toString*() : java_lang.String,EXTENSIBLE;

    PROCEDURE (self:SignatureFile$Block) getMetaName*() : java_lang.String,NEW,EXTENSIBLE;

    PROCEDURE (self:SignatureFile$Block) write*(p0 : java_io.OutputStream),NEW,EXTENSIBLE;

    PROCEDURE (self:SignatureFile) generateBlock*(    p0 : java_security.PrivateKey;
                                                  IN  p1 : ARRAY OF java_security_cert.X509Certificate;
                                                      p2 : BOOLEAN) : SignatureFile$Block,NEW,EXTENSIBLE;

    PROCEDURE (self:SignatureFile) getBaseName*() : java_lang.String,NEW,EXTENSIBLE;

    PROCEDURE (self:SignatureFile) getMetaName*() : java_lang.String,NEW,EXTENSIBLE;

    PROCEDURE (self:SignatureFile) write*(p0 : java_io.OutputStream),NEW,EXTENSIBLE;

    PROCEDURE (self:SignatureFileVerifier) needSignatureFile*(p0 : java_lang.String) : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:SignatureFileVerifier) needSignatureFileBytes*() : BOOLEAN,NEW,EXTENSIBLE;

    PROCEDURE (self:SignatureFileVerifier) process*(p0 : java_util.Hashtable),NEW,EXTENSIBLE;

    PROCEDURE (self:SignatureFileVerifier) setSignatureFile*(IN  p0 : ARRAY OF BYTE),NEW,EXTENSIBLE;

    END sun_security_util.