Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[higgins-dev] createPersonalRequest performance problem

Hi Mike,

We are trying to improve performance of our web based identity
selector and right now the biggest problem we have is with the
performance of TokenRequestFactory.createPersonalRequest sts method.

It looks like single call to this method may take up to 40 seconds!
And about 99% of this time is taken by key pair generation method.

I was looking at the implementation and it looks like it follows MS
specification precisely and I have no idea how it could be improved.

Do you have any ideas how to improve the performance of
TokenRequestFactory.createPersonalRequest sts method?

-- 
Thanks,

Valery
Execution Statistics - getTokenObject (pcard)
Thread Name <Percent Per Thread Cumulative Time (seconds) Min Time Avg Time Max Time Calls
    [-] getTokenObject(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String[]) org.eclipse.higgins.rpps.tobj.TokenResponseTO 17.85% 18.648076 18.648076 18.648076 18.648076 1
        [-] getTokenObject(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String[]) org.eclipse.higgins.rpps.tobj.TokenResponseTO 17.85% 18.644788 18.644788 18.644788 18.644788 1
            [-] getTokenByCredential(javax.security.auth.callback.CallbackHandler, java.lang.String, java.lang.String, java.lang.String, java.lang.String[], org.eclipse.higgins.icard.auth.ICredential, org.eclipse.higgins.icard.registry.CardInformation, java.net.URL, boolean, boolean) java.lang.String 16.73% 17.479201 17.479201 17.479201 17.479201 1
                [-] getIdentityToken(org.eclipse.higgins.iss.SelectionANDofORs) org.eclipse.higgins.iss.IIdentityToken 16.51% 17.252679 17.252679 17.252679 17.252679 1
                    [-] createPersonalRequest(java.net.URI, java.security.cert.X509Certificate[], java.net.URI, org.eclipse.higgins.icard.IInformationCard, org.eclipse.higgins.sts.api.IElement, org.eclipse.higgins.sts.spi.IBase64Extension) org.eclipse.higgins.sts.api.ISTSRequest 14.93% 15.598606 15.598606 15.598606 15.598606 1
                        [-] generateRSAKeyPair(org.eclipse.higgins.sts.spi.IBase64Extension, byte[], byte[], int) java.security.KeyPair 14.89% 15.554920 15.554920 15.554920 15.554920 1
                            [-] GenerateKeyPair(java.security.spec.RSAKeyGenParameterSpec) java.security.KeyPair 14.75% 15.413007 15.413007 15.413007 15.413007 1
                                [-] findX931KeyPrime(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger) java.math.BigInteger 14.59% 15.247299 4.937923 7.623649 10.309376 2
                                        isProbableX931Prime(java.math.BigInteger) boolean 14.34% 14.983778 0.000000 0.013585 0.199062 1103
                                [+] findSmallPrimeSequential(java.math.BigInteger) java.math.BigInteger 0.12% 0.128295 0.022042 0.032074 0.058962 4
                                [+] defineClass(java.lang.String, byte[], int, int, java.security.CodeSource) java.lang.Class 0.01% 0.012258 0.005916 0.006129 0.006342 2
                                    PrivilegedActionException(java.lang.Exception) 0.00% 0.000628 0.000141 0.000157 0.000167 4
                                    getException() java.lang.Exception 0.00% 0.000611 0.000128 0.000153 0.000215 4
                                    getPublicExponent() java.math.BigInteger 0.00% 0.000307 0.000307 0.000307 0.000307 1
                                    CodeSource(java.net.URL, java.security.cert.Certificate[]) 0.00% 0.000248 0.000118 0.000124 0.000130 2
                                    X931KeyGenerator$X931RSAPrivateCrtKey(org.eclipse.higgins.sts.utilities.X931KeyGenerator, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger) 0.00% 0.000172 0.000172 0.000172 0.000172 1
                                    X931KeyGenerator$X931RSAPublicKey(org.eclipse.higgins.sts.utilities.X931KeyGenerator, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger) 0.00% 0.000147 0.000147 0.000147 0.000147 1
                                    KeyPair(java.security.PublicKey, java.security.PrivateKey) 0.00% 0.000142 0.000142 0.000142 0.000142 1
                                    getKeysize() int 0.00% 0.000004 0.000004 0.000004 0.000004 1
                            [+] getInstance(java.lang.String) java.security.MessageDigest 0.06% 0.065263 0.002306 0.004079 0.005569 16
                            [+] defineClass(java.lang.String, byte[], int, int, java.security.CodeSource) java.lang.Class 0.02% 0.020224 0.003885 0.006741 0.012310 3
                            [+] digest(byte[]) byte[] 0.02% 0.018587 0.000011 0.001162 0.001479 16
                                byteArrayToHexString(byte[]) java.lang.String 0.00% 0.003486 0.000001 0.000124 0.000267 28
                                copyByteBuffer(java.nio.ByteBuffer, int, byte[], int, int) void 0.00% 0.003192 0.000009 0.000160 0.000288 20
                                PrivilegedActionException(java.lang.Exception) 0.00% 0.000941 0.000016 0.000157 0.000337 6
                                CodeSource(java.net.URL, java.security.cert.Certificate[]) 0.00% 0.000474 0.000143 0.000158 0.000186 3
                                getException() java.lang.Exception 0.00% 0.000444 0.000001 0.000074 0.000142 6
                                encode(java.math.BigInteger) java.lang.String 0.00% 0.000393 0.000139 0.000196 0.000254 2
                                stripNewLinesFromString(java.lang.String) java.lang.String 0.00% 0.000289 0.000131 0.000145 0.000158 2
                                X931KeyGenerator(byte[], byte[], byte[], byte[], byte[], byte[]) 0.00% 0.000195 0.000195 0.000195 0.000195 1
                                -clinit-() 0.00% 0.000163 0.000163 0.000163 0.000163 1
                                RSAKeyGenParameterSpec(int, java.math.BigInteger) 0.00% 0.000157 0.000157 0.000157 0.000157 1
                                getModulus() java.math.BigInteger 0.00% 0.000132 0.000132 0.000132 0.000132 1
                                getPublicExponent() java.math.BigInteger 0.00% 0.000129 0.000129 0.000129 0.000129 1
                                getPublic() java.security.PublicKey 0.00% 0.000128 0.000128 0.000128 0.000128 1
                        [+] generatePPID(java.net.URI, byte[]) byte[] 0.02% 0.022516 0.022516 0.022516 0.022516 1
                        [+] generateRPIdentifier(java.security.cert.X509Certificate[]) byte[] 0.01% 0.010513 0.010513 0.010513 0.010513 1
                        [+] RequestSecurityToken() 0.00% 0.000552 0.000552 0.000552 0.000552 1
                        [+] STSRequest() 0.00% 0.000529 0.000529 0.000529 0.000529 1
                            encode(byte[]) java.lang.String 0.00% 0.000507 0.000186 0.000253 0.000321 2
                            EndpointReference() 0.00% 0.000411 0.000411 0.000411 0.000411 1
                            setCardId(java.net.URI) void 0.00% 0.000287 0.000287 0.000287 0.000287 1
                            getIssueRequestType() java.net.URI 0.00% 0.000171 0.000171 0.000171 0.000171 1
                            Constants() 0.00% 0.000167 0.000167 0.000167 0.000167 1
                            InformationCardReference() 0.00% 0.000165 0.000165 0.000165 0.000165 1
                            getMasterKey() byte[] 0.00% 0.000158 0.000158 0.000158 0.000158 1
                            setTokenType(java.net.URI) void 0.00% 0.000157 0.000157 0.000157 0.000157 1
                            set(java.lang.Object) void 0.00% 0.000157 0.000157 0.000157 0.000157 1
                            setRequestType(java.net.URI) void 0.00% 0.000157 0.000157 0.000157 0.000157 1
                            setClientPseudonym(org.eclipse.higgins.sts.api.IElement) void 0.00% 0.000157 0.000157 0.000157 0.000157 1
                            setCardVersion(java.lang.String) void 0.00% 0.000157 0.000157 0.000157 0.000157 1
                            setInformationCardReference(org.eclipse.higgins.sts.api.IInformationCardReference) void 0.00% 0.000156 0.000156 0.000156 0.000156 1
                            getCardId() java.net.URI 0.00% 0.000156 0.000156 0.000156 0.000156 1
                            getNoProofKeyKeyType() java.net.URI 0.00% 0.000155 0.000155 0.000155 0.000155 1
                            setAddress(java.net.URI) void 0.00% 0.000155 0.000155 0.000155 0.000155 1
                            getID() java.lang.String 0.00% 0.000155 0.000155 0.000155 0.000155 1
                            setIssuer(org.eclipse.higgins.sts.api.IEndpointReference) void 0.00% 0.000153 0.000153 0.000153 0.000153 1
                            Element() 0.00% 0.000150 0.000150 0.000150 0.000150 1
                            setKeyType(java.net.URI) void 0.00% 0.000147 0.000147 0.000147 0.000147 1
                            setSelfSigningKeyPair(java.security.KeyPair) void 0.00% 0.000137 0.000137 0.000137 0.000137 1
                            getRequestSecurityTokenCollection() java.util.List 0.00% 0.000132 0.000132 0.000132 0.000132 1
                            setClaims(org.eclipse.higgins.sts.api.IElement) void 0.00% 0.000128 0.000128 0.000128 0.000128 1
                    [+] makeClaims(org.eclipse.higgins.icard.policy.ICardSpacePolicy, org.eclipse.higgins.icard.IInformationCard, org.eclipse.higgins.iss.SelectionANDofORs, org.eclipse.higgins.sts.spi.IBase64Extension) org.eclipse.higgins.sts.api.IElement 0.57% 0.594458 0.594458 0.594458 0.594458 1
                    [+] invoke(java.util.Map, java.lang.String, java.util.Map, java.util.Map, org.eclipse.higgins.sts.api.IConstants, org.eclipse.higgins.sts.api.ISTSRequest, org.eclipse.higgins.sts.api.ISTSResponse) void 0.49% 0.513635 0.513635 0.513635 0.513635 1
                    [+] getConfigurationHandler(boolean) org.eclipse.higgins.configuration.xml.ConfigurationHandler 0.37% 0.390479 0.390479 0.390479 0.390479 1
                    [+] getICardByCUID(javax.security.auth.callback.CallbackHandler, java.lang.String) org.eclipse.higgins.icard.ICard 0.08% 0.083616 0.083616 0.083616 0.083616 1
                    [+] getICardByCUID(javax.security.auth.callback.CallbackHandler, org.eclipse.higgins.icard.CUID) org.eclipse.higgins.icard.ICard 0.06% 0.061721 0.061721 0.061721 0.061721 1
                    [+] getCUID() org.eclipse.higgins.icard.CUID 0.00% 0.001299 0.001299 0.001299 0.001299 1
                    [+] STSResponse() 0.00% 0.000725 0.000725 0.000725 0.000725 1
                        Constants() 0.00% 0.000345 0.000345 0.000345 0.000345 1
                        getElements() java.util.ArrayList 0.00% 0.000319 0.000319 0.000319 0.000319 1
                        encode(byte[]) java.lang.String 0.00% 0.000275 0.000275 0.000275 0.000275 1
                        IdentityToken(org.eclipse.higgins.sts.api.ISTSResponse, java.lang.String) 0.00% 0.000216 0.000216 0.000216 0.000216 1
                        isSelfIssued() boolean 0.00% 0.000207 0.000207 0.000207 0.000207 1
                        getAs(java.lang.Class) java.lang.Object 0.00% 0.000159 0.000159 0.000159 0.000159 1
                        getUUID() java.lang.String 0.00% 0.000151 0.000151 0.000151 0.000151 1
                        getCredential() org.eclipse.higgins.icard.auth.ICredential 0.00% 0.000143 0.000143 0.000143 0.000143 1
                        TokenRequestFactory() 0.00% 0.000136 0.000136 0.000136 0.000136 1
                        getSettings() java.util.Map 0.00% 0.000090 0.000090 0.000090 0.000090 1
                        escapedString(java.lang.String) java.lang.String 0.00% 0.000026 0.000026 0.000026 0.000026 1
                        getFault() org.eclipse.higgins.sts.api.IFault 0.00% 0.000003 0.000003 0.000003 0.000003 1
                        getProvider() org.eclipse.higgins.icard.ICardProvider 0.00% 0.000001 0.000001 0.000001 0.000001 1
                [+] getAs(java.lang.Class) java.lang.Object 0.20% 0.205992 0.205992 0.205992 0.205992 1
                [+] getICardSelector(javax.security.auth.callback.CallbackHandler, java.lang.String) org.eclipse.higgins.iss.IICardSelector 0.01% 0.009878 0.009878 0.009878 0.009878 1
                [+] parseSSLCert(java.lang.String) java.security.cert.X509Certificate 0.01% 0.008122 0.008122 0.008122 0.008122 1
                    setCredential(org.eclipse.higgins.icard.auth.ICredential) void 0.00% 0.000502 0.000502 0.000502 0.000502 1
                    getCardCredential() org.eclipse.higgins.icard.registry.CardCredential 0.00% 0.000485 0.000485 0.000485 0.000485 1
                    SelectionANDofORs() 0.00% 0.000143 0.000143 0.000143 0.000143 1
                    getInstance() org.eclipse.higgins.iss.ICardSelectorService 0.00% 0.000140 0.000140 0.000140 0.000140 1
                    SelectionANDofORsElm(java.lang.String, int, int) 0.00% 0.000140 0.000140 0.000140 0.000140 1
                    CUID(java.lang.String) 0.00% 0.000004 0.000004 0.000004 0.000004 1
                    add(org.eclipse.higgins.iss.SelectionANDofORsElm) void 0.00% 0.000002 0.000002 0.000002 0.000002 1
            [+] getCardInformationByCuid(javax.security.auth.callback.CallbackHandler, org.eclipse.higgins.icard.CUID) org.eclipse.higgins.icard.registry.CardInformation 0.87% 0.904028 0.904028 0.904028 0.904028 1
            [+] convertArray_to_Credential(javax.security.auth.callback.CallbackHandler, java.lang.String, java.lang.String, java.util.Hashtable) org.eclipse.higgins.icard.auth.ICredential 0.24% 0.254879 0.254879 0.254879 0.254879 1
            [+] getCallbackHandler(java.lang.String, java.lang.String) javax.security.auth.callback.CallbackHandler 0.00% 0.001284 0.000409 0.000428 0.000443 3
            [+] createTokenResponse(java.lang.String) org.eclipse.higgins.rpps.tobj.TokenResponseTO 0.00% 0.001178 0.001178 0.001178 0.001178 1
            [+] AllowSelfSignedSSL() void 0.00% 0.001128 0.001128 0.001128 0.001128 1
            [+] getInstance() org.eclipse.higgins.rpps.core.IRppsService 0.00% 0.000779 0.000317 0.000389 0.000462 2
                CUID(java.lang.String) 0.00% 0.000165 0.000165 0.000165 0.000165 1
                getCardCredential() org.eclipse.higgins.icard.registry.CardCredential 0.00% 0.000142 0.000142 0.000142 0.000142 1
            endProcess(java.lang.String) void 0.00% 0.001443 0.001443 0.001443 0.001443 1
        [+] RPProtocolSupportDelegate() 0.00% 0.001144 0.001144 0.001144 0.001144 1
            startProcess(java.lang.String) void 0.00% 0.000151 0.000151 0.000151 0.000151 1
    [+] defineClass(java.lang.String, byte[], int, int, java.security.CodeSource) java.lang.Class 4.36% 4.553082 0.002538 0.008893 0.067921 512
        PrivilegedActionException(java.lang.Exception) 0.30% 0.315129 0.000000 0.000172 0.002534 1834
        getException() java.lang.Exception 0.28% 0.288216 0.000000 0.000157 0.000894 1834
    [+] getInstance(java.lang.String) java.security.MessageDigest 0.16% 0.166512 0.004028 0.008326 0.013654 20
    [+] update(byte[]) void 0.13% 0.132019 0.000006 0.000443 0.001841 298
    [+] digest(byte[]) byte[] 0.12% 0.122419 0.000355 0.001360 0.007423 90
    [+] update(byte) void 0.08% 0.086228 0.000000 0.000663 0.010393 130
        CodeSource(java.net.URL, java.security.cert.Certificate[]) 0.08% 0.083043 0.000000 0.000176 0.000994 472
    [+] getService(java.lang.String, java.lang.String) java.security.Provider$Service 0.05% 0.054175 0.000723 0.001593 0.003246 34
    [+] newInstance() javax.xml.parsers.DocumentBuilderFactory 0.05% 0.053103 0.007887 0.026552 0.045216 2
    [+] clone() java.lang.Object 0.05% 0.053033 0.000189 0.003315 0.008857 16
    [+] newInstance(java.lang.Object) java.lang.Object 0.04% 0.041844 0.000671 0.008369 0.024176 5
    [+] newInstance() javax.xml.parsers.SAXParserFactory 0.03% 0.036036 0.036036 0.036036 0.036036 1
    [+] digest(byte[], int, int) int 0.02% 0.017521 0.000003 0.000584 0.005082 30
    [+] nextBytes(byte[]) void 0.02% 0.017406 0.000998 0.002176 0.006010 8
    [+] RPPSServiceImpl() 0.02% 0.017163 0.000745 0.008582 0.016418 2
    [+] SecureRandom() 0.02% 0.016416 0.006114 0.008208 0.010302 2
    [+] digest() byte[] 0.02% 0.016324 0.000096 0.000583 0.001114 28
    [+] update(byte[], int, int) void 0.01% 0.015064 0.000095 0.000502 0.001652 30
    [+] supportsParameter(java.lang.Object) boolean 0.01% 0.010531 0.000508 0.002106 0.004399 5
        CodeSource(java.net.URL, java.security.CodeSigner[]) 0.01% 0.006896 0.000004 0.000172 0.000684 40
    [+] getContext() java.security.AccessControlContext 0.00% 0.005158 0.000414 0.000860 0.001536 6
    [+] getAttribute(java.lang.String) java.lang.String 0.00% 0.003990 0.000749 0.000997 0.001354 4
        getProvider() java.security.Provider 0.00% 0.002443 0.000002 0.000163 0.000719 15
        getAlgorithm() java.lang.String 0.00% 0.001374 0.000003 0.000137 0.000506 10
        isNamespaceAware() boolean 0.00% 0.000443 0.000164 0.000221 0.000279 2
        setNamespaceAware(boolean) void 0.00% 0.000338 0.000133 0.000169 0.000205 2
        isValidating() boolean 0.00% 0.000299 0.000136 0.000149 0.000163 2
        isIgnoringComments() boolean 0.00% 0.000244 0.000244 0.000244 0.000244 1
        SAXParser() 0.00% 0.000220 0.000220 0.000220 0.000220 1
        DocumentBuilder() 0.00% 0.000166 0.000166 0.000166 0.000166 1
        getName() java.lang.String 0.00% 0.000161 0.000161 0.000161 0.000161 1
        setNamespaceAware(boolean) void 0.00% 0.000161 0.000161 0.000161 0.000161 1
        getTkn() java.lang.String 0.00% 0.000156 0.000156 0.000156 0.000156 1
        setValidating(boolean) void 0.00% 0.000154 0.000154 0.000154 0.000154 1
        Permission(java.lang.String) 0.00% 0.000152 0.000152 0.000152 0.000152 1
        isCoalescing() boolean 0.00% 0.000147 0.000147 0.000147 0.000147 1
        isNamespaceAware() boolean 0.00% 0.000145 0.000145 0.000145 0.000145 1
        isIgnoringElementContentWhitespace() boolean 0.00% 0.000142 0.000142 0.000142 0.000142 1
        getName() java.lang.String 0.00% 0.000142 0.000142 0.000142 0.000142 1
        isValidating() boolean 0.00% 0.000015 0.000002 0.000008 0.000013 2
        isExpandEntityReferences() boolean 0.00% 0.000002 0.000002 0.000002 0.000002 1
Method Percent Per Thread Cumulative Time (seconds)
    org.eclipse.higgins.sts.utilities.X931KeyGenerator.GenerateKeyPair(java.security.spec.RSAKeyGenParameterSpec) java.security.KeyPair 14.75% 15.413007
    org.eclipse.higgins.sts.utilities.KeyGenHelper.generateRSAKeyPair(org.eclipse.higgins.sts.spi.IBase64Extension, byte[], byte[], int) java.security.KeyPair 14.89% 15.554920
    org.eclipse.higgins.sts.client.TokenRequestFactory.createPersonalRequest(java.net.URI, java.security.cert.X509Certificate[], java.net.URI, org.eclipse.higgins.icard.IInformationCard, org.eclipse.higgins.sts.api.IElement, org.eclipse.higgins.sts.spi.IBase64Extension) org.eclipse.higgins.sts.api.ISTSRequest 14.93% 15.598606
    org.eclipse.higgins.iss.cardspace.CardSpaceSelector.getIdentityToken(org.eclipse.higgins.iss.SelectionANDofORs) org.eclipse.higgins.iss.IIdentityToken 16.51% 17.252679
    org.eclipse.higgins.rpps.core.impl.RppsService.getTokenByCredential(javax.security.auth.callback.CallbackHandler, java.lang.String, java.lang.String, java.lang.String, java.lang.String[], org.eclipse.higgins.icard.auth.ICredential, org.eclipse.higgins.icard.registry.CardInformation, java.net.URL, boolean, boolean) java.lang.String 16.73% 17.479201
    org.eclipse.higgins.rpps.delegate.RPProtocolSupportDelegate.getTokenObject(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String[]) org.eclipse.higgins.rpps.tobj.TokenResponseTO 17.85% 18.644788
    org.eclipse.higgins.rpps.webservices.RPPSServiceImpl.getTokenObject(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String[]) org.eclipse.higgins.rpps.tobj.TokenResponseTO 17.85% 18.648076

Back to the top