< prev index next >
src/java.security.jgss/share/classes/sun/security/krb5/internal/PAData.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 33,42 ****
--- 33,44 ----
import sun.security.krb5.internal.crypto.EType;
import sun.security.util.*;
import sun.security.krb5.Asn1Exception;
import java.io.IOException;
+ import java.util.Vector;
+
import sun.security.krb5.internal.util.KerberosString;
/**
* Implements the ASN.1 PA-DATA type.
*
*** 138,147 ****
--- 140,184 ----
public byte[] getValue() {
return ((pADataValue == null) ? null : pADataValue.clone());
}
/**
+ * Parse (unmarshal) a PAData from a DER input stream. This form
+ * parsing might be used when expanding a value which is part of
+ * a constructed sequence and uses explicitly tagged type.
+ *
+ * @exception Asn1Exception if an Asn1Exception occurs.
+ * @param data the Der input stream value, which contains one or more
+ * marshaled values.
+ * @param explicitTag tag number.
+ * @param optional indicates if this data field is optional.
+ * @return an array of PAData.
+ */
+ public static PAData[] parseSequence(DerInputStream data,
+ byte explicitTag, boolean optional)
+ throws Asn1Exception, IOException {
+ if ((optional) &&
+ (((byte)data.peekByte() & (byte)0x1F) != explicitTag))
+ return null;
+ DerValue subDer = data.getDerValue();
+ DerValue subsubDer = subDer.getData().getDerValue();
+ if (subsubDer.getTag() != DerValue.tag_SequenceOf) {
+ throw new Asn1Exception(Krb5.ASN1_BAD_ID);
+ }
+ Vector<PAData> v = new Vector<>();
+ while (subsubDer.getData().available() > 0) {
+ v.addElement(new PAData(subsubDer.getData().getDerValue()));
+ }
+ if (v.size() > 0) {
+ PAData[] pas = new PAData[v.size()];
+ v.copyInto(pas);
+ return pas;
+ }
+ return null;
+ }
+
+ /**
* Gets the preferred etype from the PAData array.
* <ol>
* <li>ETYPE-INFO2-ENTRY with unknown s2kparams ignored</li>
* <li>ETYPE-INFO2 preferred to ETYPE-INFO</li>
* <li>Multiple entries for same etype in one PA-DATA, use the first one.</li>
< prev index next >