7Z  java/lang/Object()Vjava/security/SecureRandom   0net/luminis/tls/handshake/TlsSessionRegistryImplrandomGeneratorLjava/util/Random;&java/util/concurrent/ConcurrentHashMap   sessionsLjava/util/Map;  java/util/concurrent/TimeUnitHOURSLjava/util/concurrent/TimeUnit;  !" toSeconds(J)J $ %&ticketLifeTimeInSecondsI ()* +,java/util/concurrent/Executors newSingleThreadScheduledExecutor1()Ljava/util/concurrent/ScheduledExecutorService;. /0runH(Lnet/luminis/tls/handshake/TlsSessionRegistryImpl;)Ljava/lang/Runnable; 2 3MINUTES 567 89-java/util/concurrent/ScheduledExecutorServicescheduleAtFixedRate](Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;  < =>createNewSessionTicketMessage(BLnet/luminis/tls/TlsConstants$CipherSuite;Lnet/luminis/tls/TlsState;Ljava/lang/String;Ljava/lang/Long;[B)Lnet/luminis/tls/handshake/NewSessionTicketMessage; @AB CDnet/luminis/tls/TlsState computePSK([B)[B FGH IJjava/util/RandomnextLong()J FL MN nextBytes([B)V PQR STjava/time/Instantnow()Ljava/time/Instant; V WSECONDS Y Z"toMillis P\ ]^ plusMillis(J)Ljava/time/Instant;`9net/luminis/tls/handshake/TlsSessionRegistryImpl$BytesKey _b c7(Lnet/luminis/tls/handshake/TlsSessionRegistryImpl;[B)Ve8net/luminis/tls/handshake/TlsSessionRegistryImpl$Session dg h(Lnet/luminis/tls/handshake/TlsSessionRegistryImpl;[BBJ[BLnet/luminis/tls/TlsConstants$CipherSuite;Ljava/time/Instant;Ljava/time/Instant;Ljava/lang/String;[B)V jkl mn java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;p1net/luminis/tls/handshake/NewSessionTicketMessage rst uJjava/lang/Long longValue ow x (IJ[B[BJ)V oz { (IJ[B[B)V }~ java/util/Listsize()I } get(I)Ljava/lang/Object;Fnet/luminis/tls/extension/ClientHelloPreSharedKeyExtension$PskIdentity  getIdentity()[B j &(Ljava/lang/Object;)Ljava/lang/Object; d expiryLjava/time/Instant; P isAfter(Ljava/time/Instant;)Z d cipher*Lnet/luminis/tls/TlsConstants$CipherSuite;  java/lang/IntegervalueOf(I)Ljava/lang/Integer; j remove$net/luminis/tls/handshake/TlsSession j  containsKey(Ljava/lang/Object;)Z d getData java/util/NoSuchElementException  j entrySet()Ljava/util/Set;   java/util/Setstream()Ljava/util/stream/Stream; test3(Ljava/time/Instant;)Ljava/util/function/Predicate;  java/util/stream/Streamfilter9(Ljava/util/function/Predicate;)Ljava/util/stream/Stream; apply()Ljava/util/function/Function; map8(Ljava/util/function/Function;)Ljava/util/stream/Stream;  java/util/stream/CollectorstoList()Ljava/util/stream/Collector; collect0(Ljava/util/stream/Collector;)Ljava/lang/Object; acceptQ(Lnet/luminis/tls/handshake/TlsSessionRegistryImpl;)Ljava/util/function/Consumer; } forEach (Ljava/util/function/Consumer;)V  java/util/Map$EntrygetKey()Ljava/lang/Object; getValue P isBefore,net/luminis/tls/handshake/TlsSessionRegistryDEFAULT_TICKET_LIFETIME_HOURS ConstantValueDEFAULT_TICKET_LENGTH SignatureLjava/util/Map;CodeLineNumberTableLocalVariableTablethis2Lnet/luminis/tls/handshake/TlsSessionRegistryImpl;(I)V(BLnet/luminis/tls/TlsConstants$CipherSuite;Lnet/luminis/tls/TlsState;Ljava/lang/String;)Lnet/luminis/tls/handshake/NewSessionTicketMessage; ticketNonceBtlsStateLnet/luminis/tls/TlsState;applicationProtocolLjava/lang/String;maxEarlyDataSizeLjava/lang/Long;data[BpskageAddJticketId StackMapTable (net/luminis/tls/TlsConstants$CipherSuite java/lang/StringselectIdentityO(Ljava/util/List;Lnet/luminis/tls/TlsConstants$CipherSuite;)Ljava/lang/Integer;key;Lnet/luminis/tls/handshake/TlsSessionRegistryImpl$BytesKey;candidateSession:Lnet/luminis/tls/handshake/TlsSessionRegistryImpl$Session;i identitiesLjava/util/List;LocalVariableTypeTableZLjava/util/List;(Ljava/util/List;Lnet/luminis/tls/TlsConstants$CipherSuite;)Ljava/lang/Integer; useSessionp(Lnet/luminis/tls/extension/ClientHelloPreSharedKeyExtension$PskIdentity;)Lnet/luminis/tls/handshake/TlsSession; pskIdentityHLnet/luminis/tls/extension/ClientHelloPreSharedKeyExtension$PskIdentity;peekSessionDataL(Lnet/luminis/tls/extension/ClientHelloPreSharedKeyExtension$PskIdentity;)[BcleanupExpiredPsksexpiredMLjava/util/List;lambda$cleanupExpiredPsks$2>(Lnet/luminis/tls/handshake/TlsSessionRegistryImpl$BytesKey;)Vlambda$cleanupExpiredPsks$1R(Ljava/util/Map$Entry;)Lnet/luminis/tls/handshake/TlsSessionRegistryImpl$BytesKey;entryLjava/util/Map$Entry;lambda$cleanupExpiredPsks$0+(Ljava/time/Instant;Ljava/util/Map$Entry;)Z SourceFileTlsSessionRegistryImpl.java NestMembersBootstrapMethods0 123 45"java/lang/invoke/LambdaMetafactory metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;8 9  < = )*?(Ljava/util/Map$Entry;)ZB C %&&F(Ljava/lang/Object;)VH I #$$ InnerClassesMnet/luminis/tls/TlsConstants CipherSuiteBytesKeySessionR:net/luminis/tls/extension/ClientHelloPreSharedKeyExtension PskIdentityEntryV%java/lang/invoke/MethodHandles$LookupXjava/lang/invoke/MethodHandlesLookup! &&%& {=**Y *Y*#'*- 14W+'(,(-<. =F *:*#12 3 %&=^ *,-;74    =>w -YT?:* E7: *  KOU*#X[: *_Y* adY* ,O fiWoY*#YT qvoY*#YT y& < =>?%@8AeBjCFp   8e &   @ r   P\>+|Q_Y*+a:*d:O,"L M#N3OFWOXTLZ]>#13!X&\\\ \ QM*_Y*+ac<*_Y*+a*_Y*+adYhi4l<<4 @OL*+̹}M,*qrs"t'u3v?w @<S3 ! 3 !"#$@ *+Wv  %&4 *_t  '( )*E+d*sS'(+,-_d.*/676/:;>/@AD/EGJK2 LN@_ Od PQS jT UWY