2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/*
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Copyright  ( c )  2021 ,  Idan  Horowitz  < idan . horowitz @ serenityos . org > 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Copyright  ( c )  2022 ,  stelar7  < dudedbz @ gmail . com > 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  SPDX - License - Identifier :  BSD - 2 - Clause 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <AK/Random.h> 
  
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <AK/StringBuilder.h> 
  
						 
					
						
							
								
									
										
										
										
											2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  <LibJS/Runtime/TypedArray.h> 
  
						 
					
						
							
								
									
										
										
										
											2023-02-12 21:25:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibWeb/Bindings/ExceptionOrUtils.h> 
  
						 
					
						
							
								
									
										
										
											
												LibWeb: Remove unecessary dependence on Window from assorted classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct Crypto, Encoding, HRT, IntersectionObserver,
NavigationTiming, Page, RequestIdleCallback, Selection, Streams, URL,
and XML classes.
											 
										 
										
											2022-09-25 18:11:21 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibWeb/Bindings/Intrinsics.h> 
  
						 
					
						
							
								
									
										
										
										
											2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  <LibWeb/Crypto/Crypto.h> 
  
						 
					
						
							
								
									
										
										
										
											2021-12-13 20:48:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <LibWeb/Crypto/SubtleCrypto.h> 
  
						 
					
						
							
								
									
										
										
										
											2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								namespace  Web : : Crypto  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-02-12 21:21:12 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebIDL : : ExceptionOr < JS : : NonnullGCPtr < Crypto > >  Crypto : : create ( JS : : Realm &  realm )  
						 
					
						
							
								
									
										
										
										
											2022-09-04 13:15:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-02-12 21:21:12 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  MUST_OR_THROW_OOM ( realm . heap ( ) . allocate < Crypto > ( realm ,  realm ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-04 13:15:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												LibWeb: Remove unecessary dependence on Window from assorted classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct Crypto, Encoding, HRT, IntersectionObserver,
NavigationTiming, Page, RequestIdleCallback, Selection, Streams, URL,
and XML classes.
											 
										 
										
											2022-09-25 18:11:21 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Crypto : : Crypto ( JS : : Realm &  realm )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    :  PlatformObject ( realm ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-04 13:15:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Crypto : : ~ Crypto ( )  =  default ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-28 12:33:35 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								JS : : ThrowCompletionOr < void >  Crypto : : initialize ( JS : : Realm &  realm )  
						 
					
						
							
								
									
										
										
										
											2021-12-13 20:48:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-01-28 12:33:35 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    MUST_OR_THROW_OOM ( Base : : initialize ( realm ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-10 06:28:20 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    set_prototype ( & Bindings : : ensure_web_prototype < Bindings : : CryptoPrototype > ( realm ,  " Crypto " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-12 21:25:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    m_subtle  =  TRY ( Bindings : : throw_dom_exception_if_needed ( realm . vm ( ) ,  [ & ] ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  SubtleCrypto : : create ( realm ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-28 12:33:35 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-13 20:48:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-03 19:59:53 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								JS : : NonnullGCPtr < SubtleCrypto >  Crypto : : subtle ( )  const  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  * m_subtle ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// https://w3c.github.io/webcrypto/#dfn-Crypto-method-getRandomValues
  
						 
					
						
							
								
									
										
										
										
											2022-09-25 17:03:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebIDL : : ExceptionOr < JS : : Value >  Crypto : : get_random_values ( JS : : Value  array )  const  
						 
					
						
							
								
									
										
										
										
											2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // 1. If array is not an Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, or BigUint64Array, then throw a TypeMismatchError and terminate the algorithm.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( ! array . is_object ( )  | |  ! ( is < JS : : Int8Array > ( array . as_object ( ) )  | |  is < JS : : Uint8Array > ( array . as_object ( ) )  | |  is < JS : : Uint8ClampedArray > ( array . as_object ( ) )  | |  is < JS : : Int16Array > ( array . as_object ( ) )  | |  is < JS : : Uint16Array > ( array . as_object ( ) )  | |  is < JS : : Int32Array > ( array . as_object ( ) )  | |  is < JS : : Uint32Array > ( array . as_object ( ) )  | |  is < JS : : BigInt64Array > ( array . as_object ( ) )  | |  is < JS : : BigUint64Array > ( array . as_object ( ) ) ) ) 
							 
						 
					
						
							
								
									
										
										
											
												LibWeb: Remove unecessary dependence on Window from assorted classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct Crypto, Encoding, HRT, IntersectionObserver,
NavigationTiming, Page, RequestIdleCallback, Selection, Streams, URL,
and XML classes.
											 
										 
										
											2022-09-25 18:11:21 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  WebIDL : : TypeMismatchError : : create ( realm ( ) ,  " array must be one of Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, or BigUint64Array " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    auto &  typed_array  =  static_cast < JS : : TypedArrayBase & > ( array . as_object ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // 2. If the byteLength of array is greater than 65536, throw a QuotaExceededError and terminate the algorithm.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( typed_array . byte_length ( )  >  65536 ) 
							 
						 
					
						
							
								
									
										
										
											
												LibWeb: Remove unecessary dependence on Window from assorted classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct Crypto, Encoding, HRT, IntersectionObserver,
NavigationTiming, Page, RequestIdleCallback, Selection, Streams, URL,
and XML classes.
											 
										 
										
											2022-09-25 18:11:21 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  WebIDL : : QuotaExceededError : : create ( realm ( ) ,  " array's byteLength may not be greater than 65536 " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // IMPLEMENTATION DEFINED: If the viewed array buffer is detached, throw a InvalidStateError and terminate the algorithm.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( typed_array . viewed_array_buffer ( ) - > is_detached ( ) ) 
							 
						 
					
						
							
								
									
										
										
											
												LibWeb: Remove unecessary dependence on Window from assorted classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct Crypto, Encoding, HRT, IntersectionObserver,
NavigationTiming, Page, RequestIdleCallback, Selection, Streams, URL,
and XML classes.
											 
										 
										
											2022-09-25 18:11:21 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  WebIDL : : InvalidStateError : : create ( realm ( ) ,  " array is detached " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    // FIXME: Handle SharedArrayBuffers
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // 3. Overwrite all elements of array with cryptographically strong random values of the appropriate type.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    fill_with_random ( typed_array . viewed_array_buffer ( ) - > buffer ( ) . data ( ) ,  typed_array . viewed_array_buffer ( ) - > buffer ( ) . size ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // 4. Return array.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  array ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// https://w3c.github.io/webcrypto/#dfn-Crypto-method-randomUUID
  
						 
					
						
							
								
									
										
										
										
											2023-02-23 18:58:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								WebIDL : : ExceptionOr < String >  Crypto : : random_uuid ( )  const  
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-02-23 18:58:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    auto &  vm  =  realm ( ) . vm ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // 1. Let bytes be a byte sequence of length 16.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    u8  bytes [ 16 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // 2. Fill bytes with cryptographically secure random bytes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    fill_with_random ( bytes ,  16 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // 3. Set the 4 most significant bits of bytes[6], which represent the UUID version, to 0100.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bytes [ 6 ]  & =  ~ ( 1  < <  7 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bytes [ 6 ]  | =  1  < <  6 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bytes [ 6 ]  & =  ~ ( 1  < <  5 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bytes [ 6 ]  & =  ~ ( 1  < <  4 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // 4. Set the 2 most significant bits of bytes[8], which represent the UUID variant, to 10.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bytes [ 8 ]  | =  1  < <  7 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bytes [ 8 ]  & =  ~ ( 1  < <  6 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-04-01 20:58:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* 5. Return the string concatenation of
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        « 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 0 ] , 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-01 20:58:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 1 ] , 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 2 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 3 ] , 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-01 20:58:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " - " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 4 ] , 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 5 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " - " , 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-01 20:58:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 6 ] , 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 7 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " - " , 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-01 20:58:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 8 ] , 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 9 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " - " , 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-01 20:58:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 10 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 11 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 12 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 13 ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 14 ] , 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hexadecimal  representation  of  bytes [ 15 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        » . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    StringBuilder  builder ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-23 18:58:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    TRY_OR_THROW_OOM ( vm ,  builder . try_appendff ( " {:02x}{:02x}{:02x}{:02x}- " ,  bytes [ 0 ] ,  bytes [ 1 ] ,  bytes [ 2 ] ,  bytes [ 3 ] ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TRY_OR_THROW_OOM ( vm ,  builder . try_appendff ( " {:02x}{:02x}- " ,  bytes [ 4 ] ,  bytes [ 5 ] ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TRY_OR_THROW_OOM ( vm ,  builder . try_appendff ( " {:02x}{:02x}- " ,  bytes [ 6 ] ,  bytes [ 7 ] ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TRY_OR_THROW_OOM ( vm ,  builder . try_appendff ( " {:02x}{:02x}- " ,  bytes [ 8 ] ,  bytes [ 9 ] ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    TRY_OR_THROW_OOM ( vm ,  builder . try_appendff ( " {:02x}{:02x}{:02x}{:02x}{:02x}{:02x} " ,  bytes [ 10 ] ,  bytes [ 11 ] ,  bytes [ 12 ] ,  bytes [ 13 ] ,  bytes [ 14 ] ,  bytes [ 15 ] ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  TRY_OR_THROW_OOM ( vm ,  builder . to_string ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-30 15:58:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-13 01:23:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  Crypto : : visit_edges ( Cell : : Visitor &  visitor )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Base : : visit_edges ( visitor ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    visitor . visit ( m_subtle . ptr ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 20:02:55 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}